Cod sursa(job #211188)

Utilizator M@2Te4iMatei Misarca M@2Te4i Data 1 octombrie 2008 08:56:28
Problema Distante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

ifstream fin("distante.in");
ofstream fout("distante.out");

int n,m,s;
vector <int> v,a[50005],c[50005];

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

void rezolvare()
{
    if (v[s]!=0)
    {
        fout << "NU\n";
        return;
    }
    int o;
    for (int i=1; i<=n; i++)
    {
        o=0;
        for (unsigned j=0; j<a[i].size(); j++)
        {
            if (v[i]+c[i][j]<v[a[i][j]])
            {
                fout << "NU\n";
                return;
            }
            if (v[a[i][j]]+c[i][j]==v[i])
                o=1;
        }
        if (!o && i!=s)
        {
            fout << "NU\n";
            return;
        }
    }
    fout << "DA\n";
}

int main()
{
    //cout << "Hello world!" << endl;
    int t;
    for (fin >> t; t; t--)
    {
        v.clear();
        v.push_back(0);
        for (int i=0; i<=50002; i++)
        {
            a[i].clear();
            c[i].clear();
        }
        citire();
        rezolvare();
    }
    return 0;
}