Cod sursa(job #2420164)

Utilizator iandavidroIan David Bocioaca iandavidro Data 10 mai 2019 20:34:51
Problema Distante Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <fstream>


using namespace std;
const int NMAX =  50001;
const int MMAX = 100001;

ifstream fin("distante.in");
ofstream fout("distante.out");
struct muchie
{
    int nod,cost;

};
bool sol(vector<int> &d,vector<vector<muchie>> &G,int N, int M, int S)
{
    vector<int> viz(N,0);
    if(d[S]!=0) return false;
    for(int i=0;i<N;i++)
    {
        for(auto edge:G[i])
            if(d[i] + edge.cost < d[edge.nod]) return false;
    }
    viz[S]=1;
    for(int i=0;i<N;i++)
    {

            for (auto edge:G[i])
                if (d[i] + edge.cost == d[edge.nod] && !viz[edge.nod]) viz[edge.nod] = 1;

    }
    for(int i=0;i<N;i++)
        if(!viz[i]) return false;
    return true;

}
void citire()
{
    int T,N,M,a,b,c,S;


    fin>>T;
    for(int i=0;i<T;i++)
    {
        fin>>N>>M>>S;
        vector<vector<muchie>> G(N);
        vector<int>d(N);
        for(int i=0;i<N;i++)
            fin>>d[i];
        for(int j=0;j<M;j++)
        {
            fin>>a>>b>>c;
            G[a-1].push_back({b-1,c});
            G[b-1].push_back({a-1,c});
        }
        if(sol(d,G,N,M,S-1)) fout<<"DA\n";
        else fout<<"NU\n";
    }
}

int main() {
    citire();

    return 0;
}