Pagini recente » Cod sursa (job #2891240) | Cod sursa (job #724682) | Cod sursa (job #1436953) | Cod sursa (job #1589329) | Cod sursa (job #1428149)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <queue>
#include <vector>
using namespace std;
#define IN_FILE_NAME "distante.in"
#define OUT_FILE_NAME "distante.out"
unsigned int givenDistances[50000];
unsigned int foundDistances[50000];
int main()
{
int tests = 0, t = 0;
FILE *pFin, *pFout;
pFin = fopen(IN_FILE_NAME, "r");
pFout = fopen(OUT_FILE_NAME, "w");
fscanf(pFin, "%d", &tests);
for(t=0; t<tests; t++)
{
int n, m, s;
fscanf(pFin, "%d %d %d", &n, &m, &s);
//Edges.clear();
//Edges = vector<vector<EDGE*>>(n);
//
memset(givenDistances, 0, sizeof(givenDistances));
memset(foundDistances, 0, sizeof(foundDistances));
int i;
for(i=0; i<n; i++)
{
int nr;
fscanf(pFin, "%d", &nr);
givenDistances[i] = nr;
}
s-=1;
foundDistances[s] = 1;
for(i=0; i<m; i++)
{
// Read edges
int a,b,c;
fscanf(pFin, "%d %d %d", &a, &b, &c);
a-=1; b-=1;
//InsertEdge(&(Edges[a]), b, c);
//InsertEdge(&(Edges[b]), a, c);
if(c==0 && givenDistances[a] == givenDistances[b])
{
foundDistances[a] = 1; foundDistances[b] = 1;
}
if(givenDistances[a] + c == givenDistances[b]) foundDistances[b] = 1;
else if(givenDistances[b] + c == givenDistances[a]) foundDistances[a] = 1;
}
for(i=0; i<n; i++)
{
if(foundDistances[i] == 0)
break;
}
if(i==n)
fprintf(pFout, "DA\n");
else
fprintf(pFout, "NU\n");
}
fclose(pFin);
fclose(pFout);
return 0;
}