Pagini recente » Cod sursa (job #902654) | Cod sursa (job #2529017) | Cod sursa (job #1804901) | Cod sursa (job #2776486) | Cod sursa (job #1827004)
#include <vector>
#include <fstream>
#define MAX 50000
#define INF 2000000000
using namespace std;
int T, N, M, S, D[MAX];
vector <int> Node[MAX], C[MAX];
void initC(){
int i;
for (i=0; i<N; i++){
Node[i].clear();
C[i].clear();
}
}
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--;
for (i=0; i<N; i++)
fin >> D[i];
initC();
for (i=0; i<M; i++){
fin >> j >> k >> dist;
j--; k--;
Node[j].push_back(k); Node[k].push_back(j);
C[j].push_back(dist); C[k].push_back(dist);
}
i=N-1;
while (i>=0){
if (i==S){
if (D[i]!=0)
i=-1;
}
else{
dist=INF;
for (j=0; j<Node[i].size(); j++)
if (dist>D[Node[i][j]]+C[i][j])
dist=D[Node[i][j]]+C[i][j];
if (dist!=D[i])
i=-1;
}
i--;
}
if (i==-1)
fout << "DA\n";
else
fout << "NU\n";
}
fin.close();
fout.close();
return 0;
}