Cod sursa(job #2641703)

Utilizator PatrickCplusplusPatrick Kristian Ondreovici PatrickCplusplus Data 12 august 2020 13:56:39
Problema Distante Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<bits/stdc++.h>
using namespace std;ifstream fin("distante.in");ofstream fout("distante.out");int t,n,m,s,a,b,c;bool Dijkstra(vector<vector<pair<int,int>>>&G,vector<int>&dist,int s){vector<int>dp(n+1,1e9);set<pair<int,int>>heap;heap.insert({0,s});dp[s]=0;while(heap.size()){auto it=heap.begin();int cost=(*it).first;int nod=(*it).second;heap.erase(it);if(dp[nod]!=dist[nod])return false;for(auto vecin:G[nod]){if(cost+vecin.second<dp[vecin.first]){if(dp[vecin.first]!=1e9)heap.erase(heap.find({dp[vecin.first],vecin.first}));dp[vecin.first]=cost+vecin.second;heap.insert({dp[vecin.first],vecin.first});}}}return true;}int main(){fin>>t;while(t--){fin>>n>>m>>s;vector<int>dist(n+1);for(int i=1;i<=n;++i)fin>>dist[i];vector<vector<pair<int,int>>>G(n+1);for(int i=1;i<=m;++i){fin>>a>>b>>c;G[a].push_back({b,c});G[b].push_back({a,c});}if(Dijkstra(G,dist,s))fout<<"DA\n";else fout<<"NU\n";}return 0;}