Pagini recente » Cod sursa (job #3196687) | Cod sursa (job #1738885) | Cod sursa (job #548914) | Cod sursa (job #2215207) | Cod sursa (job #419540)
Cod sursa(job #419540)
#include <cstdio>
#include <vector>
#define NMAX 55001
#define MMAX 105001
#define INF 1000000000
using namespace std;
int T;
int val[NMAX];
int N,M,INC;
struct muchie
{
int x, y ,c;
}m[MMAX];
int P[NMAX];
void citire()
{
scanf("%d %d %d",&N,&M,&INC);
for(int i = 1 ; i <= N ; i++)
scanf("%d",&val[i]);
for(int i = 1 ; i <= M ; i++)
scanf("%d %d %d",&m[i].x,&m[i].y,&m[i].c);
}
bool rezolv()
{
if(val[INC] != 0)
return 0;
for(int i = 1 ; i <= M ; i++)
{
if(val[m[i].x] + m[i].c == val[m[i].y])
P[m[i].y] = 1;
if(val[m[i].y] + m[i].c == val[m[i].x])
P[m[i].x] = 1;
if(val[m[i].x] + m[i].c < val[m[i].y] || val[m[i].y] + m[i].c < val[m[i].x])
return 0;
}
for(int i = 1 ; i <= N ; i++)
if(!P[i] && i != INC)
return 0;
return 1;
}
int main()
{
freopen("distante.in","r",stdin);
freopen("distante.out","w",stdout);
scanf("%d", &T);
for(int i = 1 ; i <= T ;i++)
{
citire();
if(rezolv())
printf("DA\n");
else
printf("NU\n");
}
return 0;
}