Cod sursa(job #2422975)

Utilizator pasoi_stefanPasoi Stefan pasoi_stefan Data 20 mai 2019 15:17:10
Problema Distante Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.26 kb
#include<fstream>
#include<vector>
#include<string>
#include<queue>
using namespace std;
ifstream cin("distante.in");
ofstream cout("distante.out");

typedef unsigned short us;

int t;
int n,m,s;
int cnt;
vector<int> d;
vector<bool> viz;
vector<vector<pair<us,us> > > G[11];
queue<us> Q;

string ans(us t){

    if(d[s]!=0) return "NU";
    Q.push(s);
    viz[s]=1;
    cnt=n;
    while(!Q.empty()){

        us x=Q.front();
        Q.pop(); --cnt;

        for(int i=0;i<G[t][x].size();i++){

            us y=G[t][x][i].first;
            us z=G[t][x][i].second;

            if(!viz[y] && d[x]+z==d[y]){

                Q.push(y);
                viz[y]=1;

            }

        }

    }

    if(cnt>0) return "NU";
    return "DA";

}

int main(){

    cin>>t;
    for(us r=1;r<=t;r++){

        cin>>n>>m>>s;

        viz.resize(n+1,0);

        d.resize(n+1);
        for(us i=1;i<=n;i++)
            cin>>d[i];

        G[r].resize(n+1);
        for(int i=1;i<=m;i++){

            us x,y,z;
            cin>>x>>y>>z;
            G[r][x].push_back(make_pair(y,z));
            G[r][y].push_back(make_pair(x,z));

        }

        cout<<ans(r)<<'\n';

        d.clear();
        viz.clear();

    }

}