Cod sursa(job #2503919)

Utilizator AnduebossAlexandru Ariton Andueboss Data 3 decembrie 2019 22:25:59
Problema Distante Scor 0
Compilator cpp-64 Status done
Runda mirceaputemdadela8faraunsfert Marime 1.84 kb
//
//  main.cpp
//  Dijkstra
//
//  Created by Andu Andu on 11/11/2019.
//  Copyright © 2019 Andu Andu. All rights reserved.
//
#include <fstream>
#include <vector>
#include <queue>
#define INT_MAX 10000000
using namespace std;
ifstream cin("distante.in");
ofstream cout("distante.out");
const int Max=50005;
int n,m; int dist[Max]; bool viz[Max];
vector <pair<int,int> >v[Max];
int codenerg[1000000000];
struct compara
{
    bool operator()(int x,int y)
    {
        return dist[x]>dist[y];
    }
};
priority_queue <int,vector<int>,compara>q;
void dijkstra(int x)
{
    for(int i=1;i<=n;i++)
        dist[i]=INT_MAX;
    dist[x]=0;
    q.push(x);
    while(!q.empty())
    {
        int nod=q.top();
        q.pop();
        viz[nod]=0;
        for(int j=0;j<v[nod].size();j++)
        {
            int vecin=v[nod][j].first;
            int cost=v[nod][j].second;
            if(dist[vecin]>dist[nod]+cost)
            {
                dist[vecin]=dist[nod]+cost;
                if(viz[vecin]==0)
                {
                    viz[vecin]=1;
                    q.push(vecin);
                }
                
            }
        }
    }
}
int solz[100000];
int S;
void citire()
{
    cin>>n>>m>>S;
    for(int i=1;i<=m;i++)
    {
        int x,y,c; cin>>x>>y>>c;
        v[x].push_back({y,c});
    }
    for(int i=1;i<=n;i++) {
        cin>>solz[i];
    }
}
void solve() {
    citire();
    
        dijkstra(S);
    int adev = true;
        for(int i=2;i<=n;i++)
            if(dist[i]!=INT_MAX)
                if (dist[i] != solz[i]) {
                    adev = false;
                }
            else {
                dist[i] = INT_MAX;
            }
    if (adev) {
        cout<<"DA\n";
        
    }
    else {
        cout<<"NU\n";
    }
    
}
int main()
{
    int p;
    cin>>p;
    for (int cou=1;cou<=p;cou++) {
        solve();
    }
    return 0;
}