Cod sursa(job #1367243)

Utilizator lau0097Cioclei Laurentiu lau0097 Data 1 martie 2015 18:47:14
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <fstream>
# define nmax 50002
# define mmax 100002
# define inf  20000000

using namespace std;

ifstream f("distante.in");
ofstream g("distante.out");

int n,m,t,s;
struct muchie {int x,y,c;};
muchie G[mmax];
int D[nmax],Dr[nmax];

int main()
{f>>t;
int i,ok;
        while(t)
        {for(i=1;i<=n;++i) D[i]=0;
            ok=0;
        f>>n>>m>>s;
        for(i=1;i<=n;++i) f>>Dr[i];
        for(i=1;i<=m;++i)
        {
            f>>G[i].x>>G[i].y>>G[i].c;
            if(G[i].x==s) D[G[i].y]=G[i].c;
        }
        for(i=1;i<=n;++i)
        {
            if(D[i]==0 && i!=s) D[i]=inf;
        }
        while(ok==0)
        {
            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;
            }
        }

        ok=0;
        for(i=1;i<=n;++i)
        if(D[i]!=Dr[i]) {ok=1 ; i=n+1;}
        if(ok==0) g<<"DA";
            else  g<<"NU";
            if(t>1) g<<"\n";


            --t;
        }

    return 0;
}