Practice 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
Any idea or discussion is highly welcomed