Cod sursa(job #1575921)

Utilizator vancea.catalincatalin vancea.catalin Data 21 ianuarie 2016 22:26:53
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include<iostream>
#include<fstream>
#include<queue>
#include<vector>
#define NOD 50010
using namespace std;
fstream fin("distante.in",ios::in),fout("distante.out",ios::out);
vector<pair<int,int> > v[NOD];
queue<int> q;
int dst[NOD],pret[NOD];
void bfs(int s)
{
    int a,c,nod,i;
    q.push(s);
    while(!q.empty())
    {
        nod=q.front();
        for(i=0;i<v[nod].size();i++)
        {
            a=v[nod][i].first;
            c=v[nod][i].second;
            if(pret[a]>pret[nod]+c)
            {
                pret[a]=pret[nod]+c;
                q.push(a);
            }
        }
        q.pop();
    }
}
int main()
{
    int t,i,j,ok,n,m,s,c,a,b;
    fin>>t;
    for(i=1;i<=t;i++)
    {
        ok=1;
        fin>>n>>m>>s;
        for(j=1;j<=n;j++) fin>>dst[j],pret[j]=1999999999;
        pret[s]=0;
        for(j=1;j<=m;j++)
        {
            fin>>a>>b>>c;
            v[a].push_back(make_pair(b,c));
            v[b].push_back(make_pair(a,c));
        }
        bfs(s);
        for(j=1;j<=n;j++) if(dst[j]!=pret[j]) ok=0;
        if(ok==0)
            fout<<"NU\n";
        else
            fout<<"DA\n";
    }
}