Pagini recente » Cod sursa (job #2107946) | Autentificare | Cod sursa (job #133345) | Cod sursa (job #245220) | Cod sursa (job #2016919)
#include<cstdio>
#include<vector>
#define MAX_N 50000
using namespace std;
int main()
{
int i, T, Node, n, m, source, j, x, y, cost;
int dist[MAX_N+1];
bool ok;
vector<pair<int,int>>::iterator it;
FILE *fin, *fout;
fin = fopen("distante.in","r");
fout = fopen("distante.out","w");
fscanf(fin,"%d",&T);
for(i=1; i<=T; i++)
{
vector<pair<int,int>>G[MAX_N+1];
fscanf(fin,"%d%d%d",&n,&m,&source);
for(j=1; j<=n; j++)
fscanf(fin,"%d",&dist[j]);
for(j=1; j<=m; j++)
{
fscanf(fin,"%d%d%d",&x,&y,&cost);
G[x].push_back(make_pair(y,cost));
G[y].push_back(make_pair(x,cost));
}
ok = true;
for(Node=1; Node<=n && ok; Node++)
{
ok = false;
for(it = G[Node].begin(); it != G[Node].end() && !ok; it++)
if(dist[Node] == dist[(*it).first] + (*it).second || (Node == source && dist[source] == 0))
ok = true;
}
if(ok)
fprintf(fout,"DA\n");
else fprintf(fout,"NU\n");
}
fclose(fin);
fclose(fout);
return 0;
}