Pagini recente » Cod sursa (job #1484826) | Cod sursa (job #2805906) | Cod sursa (job #295291) | Cod sursa (job #11443) | Cod sursa (job #2817042)
#include<iostream>
#include <fstream>
#include<cstring>
#include<cstdlib>
using namespace std;
int n,m,t,c[100000000],d[50001],ma[20000][20000];
long long suma[1001];
void bellman(int x)
{ int i;
for(i=1;i<=n;i++)
d[i]=1000000000;
d[x]=-1;
c[1]=x;
int p=1,u=1;
while(p<=u)
{
x=c[p++];
for(i=1;i<=n;i++)
if(d[x]+ma[x][i]<d[i])
{
d[i]=d[x]+ma[x][i];
c[++u]=i;
}
}
}
void citire_solutie()
{
ifstream fin("distante.in");
ofstream fout("distante.out");
fin>>t;
int dist[50001],s;
for(int i=1;i<=t;i++)
{
fin>>n>>m>>s;
for(int lin=1;lin<=n;lin++)
for(int col=1;col<=n;col++)
ma[lin][col]=1000000000;
for (int j=1;j<=n;j++)
fin>>dist[j];
for(int i=1;i<=m;i++)
{
int a,b,c;
fin>>a>>b>>c;
ma[a][b]=ma[b][a]=c;
}
bellman(s);
int ok=1;
for(int j=1;j<=n&&ok==1;j++)
if(dist[j]!=d[j]+1)
ok=0;
if(ok)
fout<<"DA"<<'\n';
else
fout<<"NU"<<'\n';
}
fin.close();
fout.close();
}
int main()
{
citire_solutie();
return 0;
}