Pagini recente » Cod sursa (job #1587740) | Cod sursa (job #1768076) | Cod sursa (job #1781844) | Cod sursa (job #127645) | Cod sursa (job #893553)
Cod sursa(job #893553)
#include <stdio.h>
#include <vector>
#include <queue>
#include <string.h>
using namespace std;
#define infinity 0x3f3f3f3f
const int sz = (int)5e4+1;
FILE *in,*out;
int num, dist[sz];
int main()
{
in=fopen("distante.in","rt");
out=fopen("distante.out","wt");
fscanf(in,"%d",&num);
while(num--)
{
int rFrom, rTo, rCost, nodes, edges, source;
fscanf(in,"%d%d%d",&nodes, &edges, &source);
for(int i=1; i<=nodes; ++i)
fscanf(in,"%d",&dist[i]);
bool right = (dist[source] == 0), validDist[sz];
memset(validDist, false, sizeof(validDist));
for(int i=1; i<=edges; ++i)
{
fscanf(in,"%d%d%d",&rFrom, &rTo, &rCost);
if(dist[rFrom]+rCost < dist[rTo])
right = false;
if(dist[rTo]+rCost < dist[rFrom])
right = false;
if(dist[rFrom] + rCost == dist[rTo])
validDist[rTo] = true;
if(dist[rTo] + rCost == dist[rFrom])
validDist[rFrom] = true;
}
validDist[source] = true;
for(int i=1; i<=nodes; ++i)
if(!validDist[i])
right = false;
fprintf(out,"%s\n", right? "DA" : "NU");
}
fclose(in);
fclose(out);
return 0;
}