Cod sursa(job #1580946)

Utilizator PaulHerHerman Paul PaulHer Data 26 ianuarie 2016 12:41:18
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include<iostream>
#include<queue>
#include<fstream>
#include<vector>
using namespace std;
ifstream fin("distante.in");
ofstream fout("distante.out");
queue <int> q;
vector <pair< int, int> > a[100010];
int cost[100010];
int n,m,t,s;
void dijkstra(int w)
{
    int nod,b,c;
    q.push(w);
    while (!q.empty())
    {
        nod=q.front();
        for (int i=0;i<a[nod].size();i++)
        {
            b=a[nod][i].first;
            c=a[nod][i].second;
            if (cost[b]>cost[nod]+c || cost[b]==0)
            {
                cost[b]=cost[nod]+c;
                q.push(b);
            }
        }
        q.pop();
    }
}
int main ()
{
    fin>>t;
    while (t!=0)
    {
        t--;
        fin>>n>>m>>s;
        int rez[n];
        for (int i=0;i<n;i++)
        {
            fin>>rez[i];
        }
        for (int i=1;i<=m;i++)
        {
            int x,y,z;
            fin>>x>>y>>z;
            a[x].push_back(make_pair(y,z));
        }
        dijkstra(s);
        int ok=1;
        for (int i=0;i<n;i++)
        {
            if (cost[i+1]!=rez[i])
                ok=0;
        }
        if (ok==1)
        {
            fout<<"DA";
        }
        else
        {
            fout<<"NU";
        }
        fout<<"\n";
    }
}