Cod sursa(job #1754757)

Utilizator sfechisalin@yahoo.comSfechis Alin [email protected] Data 8 septembrie 2016 17:20:56
Problema Distante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <bits/stdc++.h>
using namespace std;
const int oo=0x3f3f3f3f;
using VI=vector<int>;
using VVII=vector<vector<pair<int,int>>>;
VVII G;
VI d,distanta;
int n,m,s,a,b,c,t;
void dijkstra(int sursa)
{
    d[sursa]=0;
    set<pair<int,int>>s;
    s.insert({0,sursa});
    while(!s.empty())
    {
        int nod=s.begin()->second;s.erase(s.begin());
        for(auto f:G[nod])
            if(d[f.second]>d[nod]+f.first)
            {
                d[f.second]=d[nod]+f.first;
                s.insert({d[f.second],f.second});
            }
    }
}
int main()
{
    freopen("distante.in","r",stdin);
    freopen("distante.out","w",stdout);
    scanf("%d",&t);
    for(;t;--t)
    {
        scanf("%d %d %d",&n,&m,&s);
        G=VVII(n+1);d=VI(n+1,oo);distanta=VI(n+1);
        for(int i=1;i<=n;++i)
            scanf("%d ",&distanta[i]);
        while(m--)
        {
            scanf("%d %d %d",&a,&b,&c);
            G[a].push_back({c,b});
            G[b].push_back({c,a});
        }
        dijkstra(s);
        bool itsok=true;
        for(int i=1;i<=n && itsok;++i)
            if(d[i]!=distanta[i])
                itsok=false;
        if(itsok==true)
            printf("DA\n");
        else
            printf("NU\n");
    }
    return 0;
}