제출 #99489

#제출 시각아이디문제언어결과실행 시간메모리
99489psmaoCommuter Pass (JOI18_commuter_pass)C++14
0 / 100
2013 ms7920 KiB
#include <bits/stdc++.h> using namespace std; #define fo(i,s,t) for(int i = s; i <= t; ++ i) #define fd(i,s,t) for(int i = s; i >= t; -- i) #define bf(i,s) for(int i = head[s]; i; i = e[i].next) #define mp make_pair #define fi first #define se second #define pii pair<long long,int> #define pb push_back #define VI vector<int> #define sf scanf #define pf printf #define fp freopen #define SZ(x) ((int)(x).size()) #ifdef MPS #define D(x...) printf(x) #else #define D(x...) #endif typedef long long ll; typedef double db; typedef unsigned long long ull; const int inf = 1<<30; const ll INF = 1000000000000000ll; const db Inf = 1e20; const db eps = 1e-9; void gmax(int &a,int b){a = (a > b ? a : b);} void gmin(int &a,int b){a = (a < b ? a : b);} const int maxn = 100050; int n, m, s, t, u, v, head[maxn], tot, pre[maxn]; struct edge{int next, to, w;}e[maxn<<2]; ll dist[maxn]; bool inq[maxn]; priority_queue<pii,vector<pii>,greater<pii> > pq; inline void add_edge(int u, int v, int w) { e[tot] = (struct edge){head[u], v, w}; head[u] = tot++; e[tot] = (struct edge){head[v], u, w}; head[v] = tot++; } void dijkstra(int s, int t) { pq.push(mp(0ll, s)); fo(i,1,n) dist[i] = INF; dist[s] = 0; while(!pq.empty()) { int h = pq.top().se; ll w = pq.top().fi; pq.pop(); inq[h] = false; if(w < dist[h]) continue; for(int i = head[h]; i != -1; i = e[i].next) { int v = e[i].to; if(dist[v] > dist[h] + e[i].w) { dist[v] = dist[h] + e[i].w; pre[v] = i; if(!inq[v]) inq[v] = true, pq.push(mp(dist[v], v)); } } } } inline void back_track(int t) { if(t == s) return; e[pre[t]].w = 0; back_track(e[pre[t]^1].to); } void read(int &x) { x = 0; char c = '.'; while(c < '0' || c > '9') c = getchar(); while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar(); } int main() { #ifdef MPS fp("1.in","r",stdin); fp("1.out","w",stdout); #endif read(n); read(m); read(s); read(t); read(u); read(v); memset(head,-1,sizeof(head)); fo(i,1,m) { int u, v, w; read(u); read(v); read(w); add_edge(u, v, w); } dijkstra(s, t); back_track(t); dijkstra(u, v); pf("%lld\n",dist[v]); 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...