Cod sursa(job #1006217)

Utilizator cat_red20Vasile Ioana cat_red20 Data 6 octombrie 2013 17:13:11
Problema Distante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include<fstream>
#include<cstring>
#define INF 1<<30
using namespace std;
int t,n,m,s,sol[50001];
bool exista[50001];
struct muchie
{
    int x,y,c;
}v[100001];
ifstream fin("distante.in");
ofstream fout("distante.out");


void citire()
{
    int x,y,c;
    fin>>n>>m>>s;
    for(int i=1;i<=n;i++)
    {
        fin>>sol[i];
    }
    for(int i=1;i<=m;i++)
    {
        fin>>v[i].x>>v[i].y>>v[i].c;
    }
}

bool verifica()
{
    if(sol[s]!=0)
    return 0;
    exista[s]=1;
    for(int i=1;i<=m;i++)
    {
        if(sol[v[i].x]>sol[v[i].y]+v[i].c)
            return 0;
        if(sol[v[i].y]>sol[v[i].x]+v[i].c)
            return 0;
        if(sol[v[i].y]==sol[v[i].x]+v[i].c)
            exista[v[i].y]=1;
        if(sol[v[i].x]==sol[v[i].y]+v[i].c)
            exista[v[i].x]=1;
    }
    for(int i=1;i<=n;i++)
        if(!exista[i])
        return 0;
    return 1;
}

int main()
{
    fin>>t;
    for(;t>0;t--)
    {
        citire();
        if(verifica())
            fout<<"DA\n";
        else
            fout<<"NU\n";
    }
    return 0;
}