Pagini recente » Cod sursa (job #965470) | Cod sursa (job #1588693) | Cod sursa (job #1145417) | Cod sursa (job #1100613) | Cod sursa (job #482638)
Cod sursa(job #482638)
#include<stdio.h>
#include<vector>
#include<string.h>
using namespace std;
int viz[50006];
int n,m,s,t;
int d[50006];
vector <int> v[50006];
vector <int> cost[50006];
void curatare()
{
int i,j;
for(i=1;i<=n;i++)
{
j=v[i].size();
while(j)
{
v[i].pop_back();
cost[i].pop_back();
j--;
}
}
}
int check()
{
int i,j,lim,vec;
memset(viz,0,sizeof(viz));
viz[s]=1;
for(i=1;i<=n;i++)
{
lim=v[i].size();
for(j=0;j<lim;j++)
{
vec=v[i][j];
if(d[i]+cost[i][j]<d[vec])
return 0;
if(d[i]+cost[i][j]==d[vec])
viz[vec]=1;
}
}
for(i=1;i<=n;i++)
if(!viz[i])
return 0;
return 1;
}
int main ()
{
int i,a,b,c;
freopen("distante.in","r",stdin);
freopen("distante.out","w",stdout);
scanf("%d",&t);
for(;t;t--)
{
scanf("%d%d%d",&n,&m,&s);
for(i=1;i<=n;i++)
scanf("%d",&d[i]);
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&c);
v[a].push_back(b);
cost[a].push_back(c);
v[b].push_back(a);
cost[b].push_back(c);
}
if(!d[s] && check())
printf("DA\n");
else
printf("NU\n");
curatare();
}
return 0;
}