Cod sursa(job #3188072)

Utilizator cacamaca12aasdga cacamaca12 Data 1 ianuarie 2024 15:25:41
Problema Distante Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.54 kb
#include <fstream>
#include <vector>
#include <queue>
#include <ios>
#define inf 0x3f3f3f3f
using namespace std;
ifstream cin("distante.in");
ofstream cout("distante.out");
int t,n,m,p,d[50002];

struct comp{
    bool operator()(int a,int b){
        return d[a]>d[b];
    }
};

void dij(int start,int aux[],priority_queue<int,vector<int>,comp>Q,vector<pair<int,int>>V[]){
    int v[n+2]={0};
    Q.push(start);
    for(int i=1;i<=n;++i)
        d[i]=inf;
    d[start]=0;
    v[start]=1;
    
    while(!Q.empty()){
        int val=Q.top();
        Q.pop();
        v[val]=0;
        
        for(int i=0;i<V[val].size();++i){
            int vec=V[val][i].first;
            int cost=V[val][i].second;
            
            if(d[vec]>d[val]+cost){
                d[vec]=d[val]+cost;
                if(!v[vec]) v[vec]=1,Q.push(vec);
            }
        }
            
    }
    int da=1;
    for(int i=1;i<=n && da;++i){   
        if(d[i]==inf) d[i]=0;
        if(d[i]!=aux[i]) da=0;   
    }
    if(da) cout<<"DA"<<'\n';
    else cout<<"NU"<<'\n';
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    
    cin>>t;
    for(int k=1;k<=t;++k){
        cin>>n>>m>>p;
        
        int aux[n+2];
        vector<pair<int,int>>V[n+2];
        priority_queue<int,vector<int>,comp>Q;
        
        for(int i=1;i<=n;++i) cin>>aux[i];
        
        for(int i=1;i<=m;++i){
            int x,y,z;
            cin>>x>>y>>z;
            V[x].push_back(make_pair(y,z));
        }
            
        dij(p,aux,Q,V);
        
    }

    return 0;
}