Cod sursa(job #1344943)

Utilizator alex_HarryBabalau Alexandru alex_Harry Data 17 februarie 2015 09:14:28
Problema Distante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
int N,M,D[50005],S;
vector <int> G[50005],Cost[50005];
bool Exist[50005],ok=1;
void Read()
{
    f>>N>>M>>S;
    for(int i=1;i<=N;i++)
        f>>D[i];
    for(int i=1;i<=M;i++)
    {
        int x,y,c;
        f>>x>>y>>c;
        if(D[x]+c<D[y] || D[y]+c<D[x])
            ok=0;
        if(D[x]+c==D[y])
            Exist[y]=1;
        if(D[y]+c==D[x])
            Exist[x]=1;
    }
}

int Solve()
{
    if(D[S]!=0)
        return 0;
    if(ok==0)
        return 0;
    for(int i=1;i<=N;i++)
    {
        if(i==S)
            continue;
        if(Exist[i]==0)
            return 0;
    }
    return 1;
}
int main()
{
    int T;
    f>>T;
    while(T--)
    {
        ok=1;
        Read();
        int ok=Solve();
        if(ok==1)
            g<<"DA\n";
        else
            g<<"NU\n";
        for(int i=1;i<=N;i++)
        {
            G[i].clear();
            Cost[i].clear();
        }
        memset(Exist,0,sizeof(Exist));
    }
    return 0;
}