Cod sursa(job #1791780)

Utilizator marcdariaDaria Marc marcdaria Data 29 octombrie 2016 18:44:05
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <fstream>
#include <vector>
#include <queue>
#define oo 0x3f3f3f3f

using namespace std;

ifstream fin("distante.in");
ofstream fout("distante.out");

vector <pair <int,int> > G[50001];
int D[50001],P[50001],dist[50001];
bool V[50001];
bool ok=true;

int main()
{
    int N,m,T,S;
    fin>>T;
    while(T--)
    {
    fin>>N>>m>>S;
    for(int i=1;i<=m;++i){
        int x,y,z;
        fin>>x>>y>>z;
        G[x].push_back(make_pair(y,z));
        G[y].push_back(make_pair(x,z));
    }
    for(int i=0;i<=N;i++)
        {D[i]=oo;P[i]=0;V[i]=false;}
    V[S]=true;D[S]=0;
    queue<int>Q;
    Q.push(S);
    while(!Q.empty()){
    int nod=Q.front();
    V[nod]=false;
    vector<pair <int,int> >::iterator i;
    for(i=G[nod].begin();i!=G[nod].end();++i)
    if (D[nod]+i->second<D[i->first])
    {D[i->first]=D[nod]+i->second;
    P[i->first]=nod;
    if(!V[i->first])
    {Q.push(i->first);
    V[i->first]=true;}
    }
    Q.pop();
    }

    for(int i=1;i<=N;++i)
       if(i!=S)
       {
           fin>>dist[i];
           if(dist[i]!=D[i]) ok=false;
       }

    if(ok) fout<<"DA\n";
    else fout<<"NU\n";
    /*for(int i=2;i<=N;i++)
        if(D[i]==oo)
        fout<<"0 ";
        else
        fout<<D[i]<<" ";*/
    }
    return 0;
}