Pagini recente » Cod sursa (job #2891154) | Cod sursa (job #830573) | Cod sursa (job #1726760) | Cod sursa (job #74710) | Cod sursa (job #55553)
Cod sursa(job #55553)
#include<stdio.h>
typedef struct {int u,v,c;}muchie;
int nr_vf,m,start;
muchie mch[100005];
int *dist=new int[50005];
FILE *fin,*fout;
void citire()
{int i;
fscanf(fin,"%d %d %d",&nr_vf,&m,&start);
start--;
for(i=0;i<nr_vf;i++)
fscanf(fin,"%d",&dist[i]);
for(i=0;i<m;i++)
{fscanf(fin,"%d %d %d",&mch[i].u,&mch[i].v,&mch[i].c);
mch[i].u--;
mch[i].v--;}}
int b_ford()
{int i, *gasit=new int[50005];
if(dist[start]!=0)
return 0;
for(i=0;i<m;i++)
{if(dist[mch[i].v]>dist[mch[i].u]+mch[i].c)
return 0;
if(dist[mch[i].u]>dist[mch[i].v]+mch[i].c)
return 0;}
for(i=0;i<nr_vf;i++)
gasit[i]=0;
gasit[start]=1;
for(i=0;i<m;i++)
{if(dist[mch[i].v]==dist[mch[i].u]+mch[i].c)
gasit[mch[i].v]=1;
if(dist[mch[i].u]==dist[mch[i].v]+mch[i].c)
gasit[mch[i].u]=1;}
for(i=0;i<nr_vf;i++)
if(!gasit[i])
return 0;
return 1;}
int main()
{
int i,t;
fin=fopen("distante.in","r");
fout=fopen("distante.out","w");
fscanf(fin,"%d",&t);
for(i=0;i<t;i++)
{citire();
if(b_ford())
fprintf(fout,"DA\n");
else
fprintf(fout,"NU\n");}
fclose(fin);fclose(fout);
return 0;
}