Cod sursa(job #284981)

Utilizator vladbBogolin Vlad vladb Data 22 martie 2009 10:19:45
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include<fstream>
#define max 250000

using namespace std;

ifstream fin("distante.in");
ofstream fout("distante.out");

long n,m,d1[50001],d[50001],t,s;
struct muchie { long x,y,c;
              } a[200005];

int main()
{   long k,i,cont;
    fin>>t;
    for(k=1;k<=t;k++)
    {      cont=1;
           fin>>n>>m>>s;
           for(i=1;i<=n;i++)
                  fin>>d1[i];
           for(i=1;i<=m;i++)
           {       fin>>a[i].x>>a[i].y>>a[i].c;
                   a[m+i].x=a[i].y;
                   a[m+i].y=a[i].x;
                   a[m+i].c=a[i].c;
                   if(a[i].x==s) d[a[i].y]=a[i].c;
                       else if(a[i].y==s) d[a[i].x]=a[i].c;
           }
           for(i=1;i<=n;i++)
                   if(d[i]==0) d[i]=max;
           d[s]=0;
           while(cont)
           {       cont=0;
                   for(i=1;i<=2*m;i++)
                       if(d[a[i].y]>d[a[i].x]+a[i].c)
                       {   d[a[i].y]=d[a[i].x]+a[i].c;
                           cont=1;
                       }
           }
           for(i=1;i<=n;i++)
                  if(d1[i]!=d[i]) { cont=-1; 
                                    break;
                                  }
           if(cont==-1) fout<<"NU\n";
              else fout<<"DA\n";
    }
    fin.close();
    fout.close();
    return 0;
}