Pagini recente » Cod sursa (job #671150) | Cod sursa (job #1388432) | Cod sursa (job #1042741) | Cod sursa (job #1455675) | Cod sursa (job #275499)
Cod sursa(job #275499)
#include<stdio.h>
#include<vector>
#include<queue>
#define inf 100000000
#define NMAX 50001
using namespace std;
vector <int> x[11][NMAX],y[11][NMAX];
queue <int> q;
int w,nod,z[NMAX],i,j,n,m,k,l,a,s,b,c,t,tt,ss[NMAX],d[NMAX];
int main()
{
freopen("distante.in","r",stdin);
freopen("distante.out","w",stdout);
scanf("%d",&t);
for (tt=1;tt<=t;tt++)
{
scanf("%d%d%d",&n,&m,&k);
for (i=1;i<=n;i++)
scanf("%d",&ss[i]);
for (i=1;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&c);
x[tt][a].push_back(c);
x[tt][b].push_back(c);
y[tt][a].push_back(b);
y[tt][b].push_back(a);
}
for (i=1;i<=n;i++)
d[i]=inf;
d[k]=0;
q.push(k);
z[k]=1;
while (!q.empty())
{
nod=q.front();
q.pop();
w=(int)y[tt][nod].size();
for (i=0;i<w;++i)
{
a=d[nod]+x[tt][nod][i];
if (a<d[y[tt][nod][i]])
{
d[y[tt][nod][i]]=a;
if (!z[y[tt][nod][i]])
{
q.push(y[tt][nod][i]);
z[y[tt][nod][i]]=1;
}
}
}
z[nod]=0;
}
a=1;
for (i=1;i<=n;i++)
if (ss[i]!=d[i])
{
a=0;
i=n+1;
}
if (a)
printf("DA\n");
else
printf("NU\n");
}
return 0;
}