Pagini recente » Istoria paginii runda/dist2 | Cod sursa (job #1625128) | Cod sursa (job #2095681) | Cod sursa (job #431598) | Cod sursa (job #2103717)
#include <cstdio>
#define NMAX 50010
using namespace std;
int dist_min[NMAX];
int viz[NMAX];
int graf_read(int m, int n, int s)
{
int x,y,c;
if(dist_min[s] != 0)
return 0;
for(int i = 0 ; i < m ; i++)
{
scanf("%d %d %d",&x,&y,&c);
if(dist_min[y] > dist_min[x] + c || dist_min[x] > dist_min[y] + c)
return 0;
if(dist_min[y] == dist_min[x] + c)
viz[y] = 1;
if(dist_min[x] == dist_min[y] + c)
viz[x] = 1;
}
for(int i = 1 ; i <= n ; i++)
if(viz[i] == 0)
return 0;
return 1;
}
void reset(int n)
{
for(int i = 1 ; i <=n ; i++)
viz[i] = 0;
}
void read()
{
freopen("distante.in","r",stdin);
freopen("distante.out","w",stdout);
int n,m,s,t;
scanf("%d",&t);
for(int i = 0 ; i < t ; i++)
{
scanf("%d %d %d",&n,&m,&s);
reset(n);
viz[s] = 1;
for(int j = 1 ; j <= n ; j++)
scanf("%d",&dist_min[j]);
if(graf_read(m,n,s) == 0)
printf("NU\n");
else
printf("DA\n");
}
}
int main()
{
read();
return 0;
}