Cod sursa(job #1502114)

Utilizator ionut98Bejenariu Ionut Daniel ionut98 Data 14 octombrie 2015 10:43:43
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include<fstream>
#define inf 5000
#define nmax 50005
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
struct cost
{
    long x,y,c;
}G[nmax];
long d[nmax],m,n,xi,ver[nmax];
int t;
int main()
{
    f>>t;
    while(t)
    {
        t--;
        long i,x,y,c,ok;
        f>>n>>m>>xi;
        for(i=1;i<=n;i++)
          d[i]=0;
        for(i=1;i<=n;i++)
          f>>ver[i];
        for(i=1;i<=m;++i)
        {
            f>>x>>y>>c;
            G[i].x=x;
            G[i].y=y;
            G[i].c=c;
            if(x==xi)
              d[y]=c;
        }
        for(i=1;i<=n;++i)
          if(i!=xi)
            if(d[i]==0)
              d[i]=inf;
        do
        {
            ok=1;
            for(i=1;i<=m;++i)
              if(d[G[i].y]>d[G[i].x]+G[i].c)
              {
                  d[G[i].y]=d[G[i].x]+G[i].c;
                  ok=0;
              }
        }while(!ok);
        ok=1;
        for(i=1;i<=n&&ok==1;++i)
          if(d[i]!=ver[i])
            ok=0;
        if(ok==1)
          g<<"DA\n";
        else
          g<<"NU\n";
        /*for(i=1;i<=n;i++)
          g<<d[i]<<" ";
        g<<"\n";*/
    }
    return 0;
 }