Pagini recente » Cod sursa (job #1512453) | Cod sursa (job #568827) | Cod sursa (job #858773) | Cod sursa (job #918998) | Cod sursa (job #1826952)
#include <vector>
#include <fstream>
#define MAX 50000
#define INF 100000000
using namespace std;
int T, N, M, S;
vector <int> D, Di;
vector <bool> used;
vector <vector<int> > C;
int main(){
int i, j, k, x, dist;
ifstream fin ("distante.in");
ofstream fout ("distante.out");
fin >> T;
for (x=0; x<T; x++){
fin >> N >> M >> S;
S--;
D.resize(N);
for (k=0; k<N; k++)
fin >> D[k];
C.resize(N, vector<int>(N, INF));
for (k=0; k<M; k++){
fin >> i >> j >> dist;
i--; j--;
C[i][j]=C[j][i]=dist;
}
Di.resize(N);
used.resize(N, false);
for (k=0; k<N; k++)
Di[k]=C[k][S];
Di[S]=0;
used[S]=true;
for (i=0; i<N-1; i++){
dist=INF;
for (j=0; j<N; j++)
if (used[j]==false && dist>Di[j]){
k=j;
dist=Di[j];
}
used[k]=true;
for (j=0; j<N; j++)
if (Di[j]>Di[i]+C[i][j])
Di[j]=Di[i]+C[i][j];
}
i=0;
while (i<N && Di[i]==D[i])
i++;
if (i==N)
fout << "DA\n";
else
fout << "NU\n";
}
fin.close();
fout.close();
return 0;
}