Pagini recente » Cod sursa (job #2058676) | Cod sursa (job #922693) | Cod sursa (job #2336588) | Cod sursa (job #1065058) | Cod sursa (job #3184232)
#include <fstream>
using namespace std;
ifstream cin("distante.in");
ofstream cout("distante.out");
/*void dr(int n,int a[][100],int k,int d[]){
int ant[100]={0},viz[100]={0};
ant[k]=0;
for(int i=1;i<=n;i++)
if(a[k][i])
d[i]=a[k][i],ant[i]=k;
else d[i]=ant[i]=-1;
viz[k]=1;
d[k]=0;
bool ok= true;
while(ok){
int vc=-1;
for(int i=1;i<=n;i++)
if(!viz[i] && d[i]==-1)
if(d[i]<d[vc] || vc==-1)
vc=i;
if(vc!=-1)
{
for(int i=1;i<=n;i++)
if(a[vc][i])
if(d[i]>d[vc]+a[vc][i] || d[i]==-1)
d[i]=d[vc]+a[vc][i],ant[i]=vc;
viz[vc]=1;
}
else ok = false;
}
}
*/
void dj(int n,int a[][100],int v,int d[]){
int ant[101], mc[101]= {0}; ///vector de marcaje
for(int i=1; i<=n; ++i)
if(a[v][i]!=0)
{
d[i]=a[v][i];
ant[i]=v;
}
else
d[i]=ant[i]=-1;
d[v]=0;
ant[v]=0;
mc[v]=1;
bool ok=true;
while(ok)
{
int vc=-1,dmin=-1;
for(int i=1; i<=n; ++i)
if(!mc[i] && d[i]!=-1)
if(vc==-1 || d[i]<dmin)
vc=i,dmin=d[vc];
if(vc!=-1)
{
for(int i=1; i<=n; ++i)
if(a[vc][i]!=0)
if(d[i]>d[vc]+a[vc][i] || d[i]==-1)
d[i]=d[vc]+a[vc][i], ant[i]=vc;
mc[vc]=1;
}
else
ok=false;
}
}
int main()
{
int T,n,m,s,br[100],a[100][100],d[100];
cin>>T;
for(int q=0;q<T;q++)
{
cin>>n>>m>>s;
for(int y=1;y<=n;y++)
cin>>br[y];
for(int i=1;i<=m;i++)
{
int x,y;
cin>>x>>y;
cin>>a[x][y];
}
dj(n,a,s,d);
bool da=true;
for(int i=1;i<=n;i++)
if(br[i]!=d[i])
da=false;
if(da)
cout<<"DA"<<endl;
else
cout<<"NU"<<endl;
}
/* cin>>n>>m;
for(int i=1;i<=m;i++)
{
int x,y;
cin>>x>>y;
int c;
cin>>c;
a[x][y]=c,a[y][x]=c;
}
dj(n,a,1,d);
for(int i=1;i<=n;i++)
cout<<d[i]<<' ';
*/
return 0;
}
/*
5 5
1 2 1
1 3 4
2 3 2
3 4 4
4 5 2
*/