Cod sursa(job #2626473)

Utilizator Coman95coman cosmin Coman95 Data 6 iunie 2020 17:16:54
Problema Distante Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <fstream>
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;

#define NMAX 50001
#define INF 0x3f3f3f3f
typedef vector<pair<int, int> >::iterator IT;
ifstream fin("distante.in");
ofstream fout("distante.out");

int teste, n, m, s;
queue<pair<int, int> > T;
vector<pair<int, int> > G[NMAX];
int d[NMAX];
int ds[NMAX];

void Solve( int nod );

int main()
{
    int x, y, c;
    fin >> teste;
    while(teste--)
    {
        fin >> n >> m >> s;
        for( int i = 1; i <= n; ++i )
            fin >> ds[i];
        for( int i = 1; i <= m; ++i )
        {
            fin >> x >> y >> c;
            G[x].push_back(make_pair(c,y));
            G[y].push_back(make_pair(c,x));
        }
        Solve( s );

        for( int i = 1; i <= n; ++i )
            G[i].clear();
    }
    fin.close();
    fout.close();
    return 0;
}
void Solve( int nod )
{
    bool ok = true;
    for(int i = 1; i <= n; ++i){
        if(i == s){
            if( d[i] != 0 ){
                fout << "NU\n";
                return;
            }
        } else {
            ok = false;
            for( IT it = G[i].begin(); it != G[i].end(); ++it ){
                if(ds[i] > ds[it->second] + it->first){
                    fout << "NU\n";
                    return;
                }
            }
        }
    }
    fout << "DA\n";
}