Cod sursa(job #868588)

Utilizator ionut2103Covalschi Ionut ionut2103 Data 31 ianuarie 2013 11:48:35
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include<fstream>
#define nmax 100000
#define inf 999999999
using namespace std;
int n,m,i,j,k,x,y,c,t,T,d[10000],b[100000],s,ok;
struct muchie{
   long x,y,c;
}v[nmax];

int main()
{

    ifstream f("distante.in");
    ofstream g("distante.out");
    f>>T;
    for(t=1;t<=T;t++)
    {
    f>>n>>m>>s;
    for(j=1;j<=n;j++)
    f>>b[j];
    for(i=1;i<=m;i++)
    {
        f>>x>>y>>c;
        v[i].x=x;
        v[i].y=y;
        v[i].c=c;

        if(x==s)
           d[y]=c;
    }
    for(i=2;i<=n;i++)
        if(d[i]==0)
           d[i]=inf;


        do{
            ok=1;
            for(i=2;i<=n;i++)
            if(d[v[i].y]>d[v[i].x]+v[i].c)
            {
                d[v[i].y]=d[v[i].x]+v[i].c;
                ok=0;
            }

        }while(!ok);
        for(i=1;i<=n;i++)
        if(d[i]==inf)
        d[i]=0;
        int gasit=0;
        for(i=1;i<=n;i++)
           if(d[i]!=b[i])
              gasit=1;

              if(!gasit)
                 g<<"DA\n";
                 else  g<<"NU\n";
    }
}