Cod sursa(job #1575969)

Utilizator vancea.catalincatalin vancea.catalin Data 21 ianuarie 2016 22:52:00
Problema Distante Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 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 pret[NOD],ok;
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)
            {
                ok=0;
                pret[a]=pret[nod]+c;
                q.push(a);
            }
        }
        q.pop();
    }
}
int main()
{
    int t,i,j,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++) v[j].clear();
        for(j=1;j<=n;j++) fin>>pret[j];
        if(pret[s]!=0) ok=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);
        if(ok==0)
            fout<<"NU\n";
        else
            fout<<"DA\n";
    }
}