PAT-甲級-1003-Emergency

Practice 1003

PAT甲級1003
PAT甲級1003

My Solution

#include <stdio.h> 
#include <stdlib.h>
#define INF 0x3f3f3f3f

int N, M, C1, C2;
int* teams;
int** roads;
int num=0, maxteam=0, mindist=INF;
int* temp;

void DFS(int start, int dist, int team) {
	if(start == C2) {
		if(dist < mindist) {
			mindist = dist;
			maxteam = team;
			num = 1;
		} else if(dist == mindist) {
			num++;
			if(team > maxteam) {
				maxteam = team;
			}
		}
		return;
	}
	temp[start] = 1;
	for(int i=0; i<N; i++) {
		if(temp[i] == 0 && roads[start][i] > 0) {
			DFS(i, dist+roads[start][i], team+teams[i]);
		}
	}
	temp[start] = 0;
}

int main() {
	
	scanf("%d %d %d %d", &N, &M, &C1, &C2);
	
	teams = (int*) malloc(N * sizeof(int));
	for(int i=0; i<N; i++) {
		scanf("%d", &teams[i]);
	}
	
	roads = (int**) malloc(N * sizeof(int*));
	for(int i=0; i<N; i++){
		roads[i] = (int*) malloc(N * sizeof(int));
		for(int j=0; j<N; j++){
			roads[i][j] = -1;
		}
	}
	
	int start, end, len;
	for(int i=0; i<M; i++) {
		scanf("%d %d %d", &start, &end, &len);
		roads[start][end] = roads[end][start] = len;
	}
	
	temp = (int*) malloc(N * sizeof(int));
	for(int i=0; i<N; i++) {
		temp[i] = 0;
	}
	DFS(C1, 0, teams[C1]);
	
	printf("%d %d", num, maxteam);
	
	return 0;
} 

Test Result

PAT甲級1003
Any idea or discussion is highly welcomed

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章