Cod sursa(job #1347343)

Utilizator avaspAva Spataru avasp Data 18 februarie 2015 21:56:00
Problema Distante Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include<cstdio>
#include<vector>
#include<cstring>
using namespace std;
struct much{int b,c;};
much str;
vector<much>v[50001];
int vec[50001],n,m,s,a,b,c,t;
bool rez[50001];
bool verif(){
    if(vec[s]!=0){
        return false;
    }
    memset(rez,false,n);
    rez[s]=true;
    for(int i=1;i<=n;i++)
        for(int j=0;j<v[i].size();j++){
            if(vec[i]+v[i][j].c<vec[v[i][j].b])
                return false;

            if(vec[i]+v[i][j].c==vec[v[i][j].b])
                rez[v[i][j].b]=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]);
            v[i].clear();
        }
        for(int i=1;i<=m;i++){
            scanf("%d%d%d",&a,&b,&c);
            str.b=b;
            str.c=c;
            v[a].push_back(str);
            str.b=a;
            v[b].push_back(str);
        }
        if(verif()==false)
            printf("NU\n");
        else
            printf("DA\n");
    }
    return 0;
}