Untitled
unknown
plain_text
3 years ago
1.2 kB
2
Indexable
#include <bits/stdc++.h> using namespace std; long long MAX=1e15; using ll = long long; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int V, E, S; cin >> V >> E; vector<pair<ll,pair<ll, ll>>> g(E); for(pair<ll,pair<ll,ll>> &e: g) { cin >> e.first >> e.second.first >> e.second.second; } cin >> S; vector<ll> dis(V, MAX); vector<int> parent(V, -1); dis[S]=0; for(int i=0; i<V; ++i) { for(pair<ll,pair<ll,ll>> &e: g) { ll u = e.first; ll v = e.second.first; ll w = e.second.second; if(dis[u]!=MAX && dis[v]>dis[u]+w) { parent[v]=u; dis[v]=dis[u]+w; } } } bool check=1; for(pair<ll,pair<ll,ll>> &e: g) { ll u = e.first; ll v = e.second.first; ll w = e.second.second; if(dis[u]!=MAX && dis[v]>dis[u]+w) { check=0; break; } } if(check==0) cout << "Impossible!"; else for(int i=0; i<V; ++i) { if(i == S) { cout << S << ": 0\n" ; }else if(dis[i]==MAX) { cout << i << ": -1\n"; }else { int v=i; vector<int> res; while(v!=-1) { res.push_back(parent[v]); v=parent[v]; } int len = res.size(); for(int j=len-2; j>=0; --j) cout << res[j] << " -> "; cout << i << ": " << dis[i] << '\n'; } } }
Editor is loading...