Mai intai trebuie sa te autentifici.

Cod sursa(job #1770452)

Utilizator Andrei1998Andrei Constantinescu Andrei1998 Data 4 octombrie 2016 14:15:01
Problema Distante Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <iostream>
#include <vector>
#include <utility>

using namespace std;

const int NMAX = 50000 + 5;
const int MMAX = 2 * NMAX;

int d[NMAX];

vector <pair <int, int> > graph[NMAX];

bool test() {
    int n, m, s;
    cin >> n >> m >> s;

    for (int i = 1; i <= n; ++ i) {
        cin >> d[i];
        graph[i].clear();
    }

    for (int i = 1; i <= m; ++ i) {
        int a, b, c;
        cin >> a >> b >> c;

        graph[a].push_back(make_pair(b, c));
        graph[b].push_back(make_pair(a, c));
    }

    if (d[s] != 0)
        return false;

    for (int i = 1; i <= n; ++ i)
        for (auto it: graph[i])
            if (d[i] + it.second < d[it.first])
                return false;
    return true;
}

int main()
{
    freopen("distante.in", "r", stdin);
    freopen("distante.out", "w", stdout);

    int t;
    cin >> t;

    while (t --)
        if (test())
            cout << "DA\n";
        else
            cout << "NU\n";

    return 0;
}