Cod sursa(job #1027975)

Utilizator mihaiSimuSimu Mihai mihaiSimu Data 13 noiembrie 2013 12:41:10
Problema Distante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <iostream>
#include <stdio.h>
#include <fstream>
#include <vector>
#include <queue>
#include <bitset>
#define INF 500000000
#define MAXN 50005
using namespace std;

int main(){
    int n,m,t,s,x,y,c;
    vector<int> dTest(MAXN);
    bitset<MAXN> okRang;
    
    freopen("distante.in","r",stdin);
    freopen("distante.out","w",stdout);
    //ifstream in("distante.in");
    //ofstream out("distante.out");
    
    //in>>t;
    scanf("%d",&t);
    while(t--){
        //in>>n>>m>>s;
        scanf("%d %d %d",&n,&m,&s);
        for(int i=1;i<=n;i++) {
            //in>>dTest[i];
            scanf("%d",&dTest[i]);
            okRang[i] = false;
        }
        bool ok = true;
        
        for(int i=0;i<m;i++) {
            //in>>x>>y>>c;
            scanf("%d %d %d",&x,&y,&c);
            if(dTest[x]+c<dTest[y])
                ok = false;
            if(dTest[y]+c<dTest[x])
                ok=false;
            if(dTest[x]+c==dTest[y])
                okRang[y] = true;
            if(dTest[y]+c==dTest[x])
                okRang[x] = true;
        }
        okRang[s] = (dTest[s] == 0);
        
        for(int i=1;i<=n;i++)
            if(!okRang[i])
            { ok = false;break;}
        
        //if(ok) out<<"DA\n";
        //else out<<"NU\n";
        if(ok) printf("DA\n");
        else printf("NU\n");
    }
    
    return 0;
}