Cod sursa(job #1347418)

Utilizator avaspAva Spataru avasp Data 18 februarie 2015 22:44:50
Problema Distante Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<cstdio>
#include<vector>
#include<cstring>
using namespace std;
int vec[50005],n,m,s,a,b,c,t;
bool rez[50005];
bool verif(){
    if(vec[s]!=0){
        return false;
    }
    memset(rez,false,sizeof(rez));
    rez[s]=true;
    for(int qq=1;qq<=m;qq++){
        scanf("%d%d%d",&a,&b,&c);
        if(vec[a]+c<vec[b])
            return false;
        if(vec[b]+c<vec[a])
            return false;
        if(vec[a]+c==vec[b])
            rez[b]=true;

        if(vec[b]+c==vec[a])
            rez[a]=true;
        }
    for(int i=1;i<=n;i++)
        if(rez[i]==false)
            return false;
    return true;
}



int main(){
    freopen("distante.in","r",stdin);
    freopen("distante.out","w",stdout);
    scanf("%d",&t);
    for(int q=1;q<=t;q++){
        scanf("%d%d%d",&n,&m,&s);
        for(int i=1;i<=n;i++){
            scanf("%d",&vec[i]);
        }
        if(verif()==false)
            printf("NU\n");
        else
            printf("DA\n");
    }
    return 0;
}