Pagini recente » Cod sursa (job #1941922) | Cod sursa (job #2784411) | Cod sursa (job #2102781)
#include <bits/stdc++.h>
using namespace std;
vector <int> AD[50001],COST[50001];
int v[50001],viz[50001],dmin[50001];
int G()
{
int nr=0;
char c;
while(!isdigit(c))
c=getchar();
while(isdigit(c))
{
nr=nr*10+c-'0';
c=getchar();
}
return nr;
}
void dfs(int x)
{
// int ;
viz[x]=1;
for(int i=0; i<AD[x].size(); i++)
if(!viz[AD[x][i]])
{
dmin[AD[x][i]]=dmin[x]+COST[x][i];
dfs(AD[x][i]);
}
else
if(dmin[AD[x][i]]>dmin[x]+COST[x][i])
{
dmin[AD[x][i]]=dmin[x]+COST[x][i];
dfs(AD[x][i]);
}
}
int main()
{
int t,ct,n,m,s,i,a,b,c;
freopen("distante.in","r",stdin);
freopen("distante.out","w",stdout);
t=G();
for(ct=0; ct<t; ct++)
{
n=G();
m=G();
s=G();
for(i=1; i<=n; i++)
v[i]=G();
for(i=0; i<m; i++)
{
a=G();
b=G();
c=G();
AD[a].push_back(b);
COST[a].push_back(c);
AD[b].push_back(a);
COST[b].push_back(c);
}
dfs(s);
for(i=1; i<=n && v[i]==dmin[i]; i++);
if(i>n) printf("DA\n");
else printf("NU\n");
memset(v+1,0,n);
memset(viz+1,0,n);
memset(dmin+1,0,n);
for(i=1; i<=n; i++)
{
AD[i].clear();
COST[i].clear();
}
}
return 0;
}