Pagini recente » Cod sursa (job #935893) | Cod sursa (job #445078) | Cod sursa (job #2076729) | Cod sursa (job #2101034) | Cod sursa (job #2103637)
#include <iostream>
#include <cstdio>
#define N 50005
#define inf 0x3f3f3f3f
using namespace std;
int n, m, s;
int d[N], viz[N];
void clean()
{
for(int i = 0 ; i <= n ; ++i)
{
d[i] = inf;
viz[i] = 0;
}
}
int verify()
{
for(int i = 1 ; i <= n ; ++i)
{
if(!viz[i])
{
return 0;
}
}
return 1;
}
int r_graph()
{
int x, y, c;
scanf("%d %d %d\n", &n, &m, &s);
clean();
viz[s] = 1;
for(int j = 1 ; j <= n ; ++j)
{
scanf("%d ", &d[j]);
}
if(d[s])
{
return 0;
}
for(int j = 0 ; j < m ; ++j)
{
scanf("%d %d %d\n", &x, &y, &c);
if(d[x] > d[y] + c || d[y] > d[x] + c)
{
return 0;
}
if(d[x] == d[y] + c)
{
viz[x]++;
}
if(d[y] == d[x] + c)
{
viz[y]++;
}
}
return verify();
}
void citire()
{
int nr;
scanf("%d\n", &nr);
for(int i = 0 ; i < nr ; ++i)
{
if(r_graph())
{
printf("DA\n");
}
else
{
printf("NU\n");
}
}
}
int main()
{
freopen("distante.in", "r", stdin);
freopen("distante.out", "w", stdout);
citire();
return 0;
}