Cod sursa(job #265884)

Utilizator me_andyAvramescu Andrei me_andy Data 24 februarie 2009 18:28:17
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include<fstream.h>
#define max 30000090
#define maxim 50100
 ifstream f("distante.in");
 ofstream g("distante.out");
    long n,m;

struct nod
{
 int a,b,dist;
 nod *urm;
} *pr;

long d[maxim];

void add(int x,int y,int z)
{
 nod *q=new nod;
 q->a=x;
 q->b=y;
 q->dist=z;
 q->urm=pr;
 pr=q;
}

void ford()
{
 long i,ok;
 for(i=1;i<=n;i++)
  if(d[i]==0)
    d[i]=max;
 ok=1;
 while(ok==1)
 {
  ok=0;
  nod *q;
  for(q=pr;q;q=q->urm)
  {
   if(d[q->b]>d[q->a]+q->dist)
    d[q->b]=d[q->a]+q->dist,ok=1;
  }

 }


}
int main()
{  long br[maxim],t,i,x,y,z,sursa;
 f>>t;
 for(int ioi=1;ioi<=t;ioi++)
 {
   pr=new nod;
  f>>n>>m>>sursa;
  for(i=1;i<=n;i++)
   f>>br[i];
 for(i=1;i<=m;i++)
 {
  f>>x>>y>>z;
  add(x,y,z);
  if(x==sursa) d[y]=z;
 }
 ford();
 int ok1=1;
 for(i=1;i<=n;i++)
  if(d[i]==max)
   d[i]=0;
  for(i=1;i<=n;i++)
   if(d[i]!=br[i])
   {
    ok1=0;
    break;
   }
   if(ok1==1)
    g<<"DA\n";
   else
   g<<"NU\n";
 }
 return 0;
}