Pagini recente » Monitorul de evaluare | Cod sursa (job #1705149) | Cod sursa (job #479262) | Cod sursa (job #1695818) | Cod sursa (job #1827074)
#include <iostream>
#include <fstream>
using namespace std;
int t,i,j,c[10001][10001],s[10001],d[10001],x[10001],r,n,m;
ifstream fin ("distante.in");
ofstream fout ("distante.out");
void dijkstra(int r){
int i,k,j,Min;
for (i=1;i<=n;i++)
{
s[i]=0;
d[i]=0;
}
s[r]=1;
for(j=1;j<=n;j++)
d[j]=c[r][j];
d[r]=0;
for(k=1;k<=n-1;k++){
Min=100000000;
for(j=1;j<=n;j++)
if(Min>d[j]&&s[j]==0){
i=j;
Min=d[j];
}
s[i]=1;
for(j=1;j<=n;j++)
if(d[j]>d[i]+c[i][j]){
d[j]=d[i]+c[i][j];
}
}
}
void cit ()
{
int i,h,j,nr;
fin>>n>>m>>r;
for (h=1;h<=n;h++)
fin>>x[h];
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
if (i!=j) c[i][j]=100000000;
for (h=1;h<=m;h++)
{
fin>>i>>j>>nr;
c[i][j]=nr;
c[j][i]=nr;
}
/* for (i=1;i<=n;i++)
{
for (j=1;j<=n;j++)
cout<<c[i][j]<<" ";
cout<<"\n";
}
cout<<"\n";
*/
}
int main()
{
int h,i,ok;
fin>>t;
for (h=1;h<=t;h++)
{
cit();
dijkstra(r);
ok=1;
for (i=1;i<=n;i++)
{
if (d[i]!=x[i])
ok=0;
// cout<<d[i]<<" ";
}
//cout<<"\n";
if (ok) fout<<"DA";
else fout<<"NU";
fout<<"\n";
}
fin.close();
fout.close();
return 0;
}