Cod sursa(job #1070174)

Utilizator 2dorTudor Ciurca 2dor Data 31 decembrie 2013 10:58:25
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;

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

const int MAXN = 50005;
vector<vector<pair<int, int> > > G;
int a, b, c, N, M, S, T;
int best[MAXN];
queue<int> Q;
bool marked[MAXN];


void read() {
    int i;
    G.clear();
    fin >> N >> M >> S;
    for (i = 1; i <= N; ++i)
        fin >> best[i];
    for (i = 0; i < M; ++i) {
        fin >> a >> b >> c;
        G[a].push_back(make_pair(b, c));
        G[b].push_back(make_pair(a, c));
    }
}

string go() {
    int node, k = 0;//cate distante minime corecte avem; daca k = N atunci raspunsul este DA
    Q.push(1);
    do {
        node = Q.front();
        Q.pop();
        vector<pair<int, int> >::iterator it;
        for (it = G[node].begin(); it != G[node].end(); ++it) {
            if (best[node] + it->second == best[it->first]) {
                Q.push(it->first);
                k++;
            }
        }
    }while(!Q.empty());
    if (k == N)
        return "DA";
    return "NU";
}

int main() {
    G.resize(MAXN);//atribuim MAXN noduri si nr variabil de vecini ca sa putem utiliza clear();
    fin >> T;
    while (T--) {
        read();
        fout << go() << '\n';
    }
    fin.close();
    fout.close();
    return 0;
}