Cod sursa(job #2751103)

Utilizator bogdan_modoleaBogdan Modolea bogdan_modolea Data 14 mai 2021 11:10:36
Problema Distante Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.71 kb
#include <bits/stdc++.h>
#define NMAX 100005
#define ff first
#define ss second
#define pb push_back
using namespace std;
typedef long long ll;
ifstream fin("distante.in");
ofstream fout("distante.out");
vector < pair < int, int > > v[NMAX];
int d[NMAX], dist[NMAX],S, n, m, c, x,y ,T;
queue <int> Q;
bool viz[NMAX];
void bfs()
{
    int nodv, cost, nod;
    Q.push(S);
    viz[S]=1;
    d[S]=0;
    while(Q.size())
    {
        nod = Q.front();
        Q.pop();
        viz[nod]=0;
        for(auto vec : v[nod])
        {
            nodv = vec.ff;
            cost = vec.ss;
            //cout << nod << " " <<nodv << ";;;" ;
            if(d[nodv] == -1) {
                d[nodv] = d[nod] + cost;
                viz[nodv] = 1;
                Q.push(nodv);
            }
            else{
                if(d[nodv] > d[nod]+cost)
                {
                    d[nodv] = d[nod] + cost;
                    if(!viz[nodv]) Q.push(nodv), viz[nodv]=1;
                }
            }
        }
    }
}
int main() {

    fin >> T;
    for(T; T>0;T--)
    {
        fin >> n >> m >>S;
        for(int i=1;i<=n;++i)
            d[i]=-1;
        for(int i=1;i<=n;++i)
            fin >> dist[i];
        for(int i = 1;i<=m;++i)
        {
            fin >> x >> y >> c;
            v[x].pb({y,c});
            v[y].pb({x,c});
        }
        bfs();
        //for(int i=1;i<=n;++i)
        //    cout << d[i] << " ";
        //cout << "\n";
        int ok = 1;
        for(int i=1;i<=n;++i)
            if(d[i]!=dist[i]) ok=0;
        if(ok==1) fout << "DA\n";
        else fout << "NU\n";
        for(int i=1;i<=n;++i)
            v[i].clear();
    }
    return 0;
}