Cod sursa(job #1162175)

Utilizator sergiunascaSergiu Nasca sergiunasca Data 31 martie 2014 17:57:55
Problema Distante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <fstream>
#include <vector>
#include <queue>
#include <algorithm>
#include <utility>
#define NMax 50003
#define INF 1<<28
using namespace std;
ifstream fin("distante.in");
ofstream fout("distante.out");
int n,m,s,t,x;
int nod1,nod2,cost;
std::vector<int> a,d(NMax);
int main()
{
    fin>>t;
    bool ok;
    for(int k=1;k<=t;++k)
    {
        ok = true;
        fin>>n>>m>>s;
        a.push_back(0);
        for(int i=1;i<=n;++i)
        {
            fin>>x;
            a.push_back(x);
            d[i] = 0;
        }
        d[s] = 1;
        for(int i=1;i<=m;++i)
        {
            fin>>nod1>>nod2>>cost;
            if(a[nod1]+cost<a[nod2]||a[nod2]+cost<a[nod1])ok = false;
            if(a[nod1]+cost==a[nod2]&&d[nod2]==0)d[nod2] = 1;
            if(a[nod2]+cost==a[nod1]&&d[nod1]==0)d[nod1] = 1;
        }
        if(ok)
        {
            for(int i=1;i<=n;++i)
            {
                if(d[i]==0)
                {
                    ok = false;
                    break;
                }
            }
        }
        if(!ok)fout<<"NU"<<'\n';
        else fout<<"DA"<<'\n';
        a.clear();
    }
    return 0;
}