제출 #1316733

#제출 시각아이디문제언어결과실행 시간메모리
1316733aryanCommuter Pass (JOI18_commuter_pass)C++20
15 / 100
253 ms14688 KiB
#include<bits/stdc++.h> using namespace std; using i64 = long long; struct Data{ int v,w,i; Data() {}; Data(int _v,int _w,int _i) { v = _v; w = _w; i = _i; } }; int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); int n,m; cin >> n >> m; int s,t; cin >> s >> t; int u,v; cin >> u >> v; s --; t --; u --; v --; vector<vector<Data>> adj(n); for(int i = 0;i < m;i++){ int a,b,w; cin >> a >> b >> w; a --; b --; adj[a].push_back(Data(b,w,i)); adj[b].push_back(Data(a,w,i)); } const i64 inf = 1e18; vector<pair<int,int>> par(n,pair<int,int>{-1,-1}); vector<i64> dist(n,inf); priority_queue<pair<i64,int>,vector<pair<i64,int>>,greater<pair<i64,int>>> pq; pq.push({0LL,s}); dist[s] = 0; par[s] = {s,-1}; while(!pq.empty()){ auto p = pq.top(); pq.pop(); int a = p.second; i64 c = p.first; for(auto pp : adj[a]){ int vv = pp.v; int w = pp.w; if(dist[vv] > w + c){ dist[vv] = w + c; pq.push({w + c,vv}); par[vv] = {a,pp.i}; } } } vector<bool> is(m,false); int cur = t; while(true){ auto p = par[cur]; is[p.second] = true; if(p.first == s) break; cur = p.first; } for(int i = 0;i < n;i++){ for(Data &d : adj[i]){ if(is[d.i]) d.w = 0; } } dist = vector<i64>(n,inf); dist[u] = 0; pq.push({0LL,u}); while(!pq.empty()){ auto p = pq.top(); pq.pop(); int a = p.second; i64 c = p.first; for(auto pp : adj[a]){ int vv = pp.v; int w = pp.w; if(dist[vv] > w + c){ dist[vv] = w + c; pq.push({w + c,vv}); } } } cout << dist[v] << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...