Cod sursa(job #1146804)

Utilizator DanutsDanut Rusu Danuts Data 19 martie 2014 12:01:53
Problema Distante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <iostream>
#include<fstream>
#define maxn 100010
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
int d[maxn],done[maxn];
int ok,T,n,m,s,x,y,w;

int main()
{
    f>>T;
    for(int i=1;i<=T;i++){
        f>>n>>m>>s;
        //ok=1;
        for(int i=1;i<=n;i++)
            f>>d[i],done[i]=0;

        ok=d[s]==0;

        done[s]=1;

        for(int i=1;i<=m;i++){
            f>>x>>y>>w;
            if(  d[x]+w<d[y] || d[y]+w<d[x])
                ok=0;
            if(d[x]+w==d[y] && !done[y])
                done[y]=1;
            if(d[y]+w==d[x] && !done[x])
                done[x]=1;
        }

        //ok=1;
        for(int i=1;i<=n && ok;i++)
            if(done[i]==0)
                ok=0;
        if(ok)
            g<<"DA"<<'\n';
        else
            g<<"NU"<<'\n';
    }
    return 0;
}