Pagini recente » Cod sursa (job #1306816) | Cod sursa (job #2713590) | Cod sursa (job #649072) | Cod sursa (job #2420155) | Cod sursa (job #2087606)
#include <fstream>
using namespace std;
ifstream fin("distante.in");
ofstream fout("distante.out");
int d[50001],s[50001],t[50001],a[20999][20999],n;
void infinit()
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
a[i][j]=50001;
s[i]=0;
}
}
void dijkstra(int r)
{
s[r]=1;
int infini=50001;
for(int i=1;i<=n;i++)
{
d[i]=a[r][i];
if(d[i]!=infini && s[i]==0)
t[i]=r;
}
for(int i=1;i<=n-1;i++)
{
int minim=infini,poz;
for(int j=1;j<=n;j++)
if(s[j]==0)
if(d[j]<minim)
{
minim=d[j];
poz=j;
}
for(int j=1;j<=n;j++)
if(s[j]==0)
if(d[j]>d[poz]+a[poz][j])
{
d[j]=d[poz]+a[poz][j];
t[j]=poz;
}
}
}
int main()
{
int test;
fin>>test;
int g;
for(g=1;g<=test;g++)
{
int m,nod;
fin>>n>>m>>nod;
int df[100];
for(int i=1;i<=n;i++)
fin>>df[i];
infinit();
for(int i=1;i<=m;i++)
{
int x,y,z;
fin>>x>>y>>z;
a[x][y]=z;
a[i][i]=0;
}
dijkstra(nod);
int ok=0;
for(int i=1;i<=n;i++)
if(d[i]!=df[i])
{
fout<<"NU"<<'\n';
ok=1;
break;
}
if(ok==0)
fout<<"DA"<<'\n';
}
return 0;
}