Cod sursa(job #2656860)

Utilizator mihnea.anghelMihnea Anghel mihnea.anghel Data 8 octombrie 2020 22:43:18
Problema Distante Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <fstream>
#include <vector>
#include <queue>
#define f in
#define g out
#define DIM 50500

using namespace std;
ifstream in ( "distante.in" );
ofstream out( "distante.out" );
int t, n, m, sursa, i, j, x, y, cost, nod, vecin;
queue<int> q;
vector< pair<int, int> > L[DIM];
int solb[DIM], viz[DIM], d[DIM];

int main() {
    for ( f>>t; t--; ){
        f>>n>>m>>sursa;
        for ( i=1; i <= n; i++ ){
            f>>solb[i];
            L[i].clear();
            viz[i] = 0;
            d[i] = 2000000000;
        }
        for ( i=1; i <= m; i++ ){
            f>>x>>y>>cost;
            L[x].push_back({y, cost});
            L[y].push_back({x, cost});
        }
        q.push(sursa);
        d[sursa] = 0; 
        while ( !q.empty() ) {
            nod = q.front();
            for ( auto x: L[nod] ){
                vecin = x.first;
                cost = x.second;
                if ( d[vecin] > d[nod]+cost ){
                    d[vecin] = d[nod]+cost;
                    if ( viz[vecin]) continue;
                    viz[vecin] = 1;
                    q.push(vecin);
                }
            }
            viz[nod] = 0;
            q.pop();
        }
        for ( i=1; i <= n; i++ )
            if ( d[i] != solb[i] )
                break;
        if( i > n )
            g<<"DA\n";
        else g<<"NU\n";
    }
    
    return 0;
}