Cod sursa(job #755527)

Utilizator SpiriFlaviuBerbecariu Flaviu SpiriFlaviu Data 5 iunie 2012 23:48:29
Problema Distante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <fstream>
#include <vector>
#include <queue>
#include <cstring>
#include <utility>
#define INF 100000000

using namespace std;

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

vector<pair<int,int> > v[50001];
queue<int> q;
int c[50001];

int main()
{
    int t,n,m,x,a,b,y,test[50001];
    fin>>t;
    for(int i=1;i<=t;i++)
    {
        for(int j=1;j<=50000;j++)
            c[j]=INF;
        fin>>n>>m>>x;
        for(int j=1;j<=n;j++)
            fin>>test[j];
        for(int j=1;j<=m;j++)
        {
            fin>>a>>b>>y;
            v[a].push_back(make_pair(b,y));
            v[b].push_back(make_pair(a,y));
        }
        q.push(x);
        c[x]=0;
        while(!q.empty())
        {
            int F = q.front();
            for(int k=0;k<v[F].size();k++)
                if(c[v[F][k].first]>v[F][k].second+c[F])
                {
                    c[v[F][k].first]=v[F][k].second+c[F];
                    q.push(v[F][k].first);
                }

            q.pop();
        }
        bool ok=true;
        for(int j=1;ok && j<=n;j++)
        {
            if(c[j]!=test[j])
            {
                ok=false;
                fout<<"NU"<<'\n';
            }
        }
        if(ok)
            fout<<"DA"<<'\n';
        for(int j=1;j<=n;j++)
            v[j].resize(0);
    }


    fin.close();
    fout.close();
    return 0;
}