제출 #642356

#제출 시각아이디문제언어결과실행 시간메모리
642356PoonYaPatCommuter Pass (JOI18_commuter_pass)C++14
31 / 100
357 ms25060 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<ll,ll> pii; typedef tuple<ll,int,int,ll> tu; ll disS[100001],disT[100001],disU[100001],disV[100001],dis[100001]; vector<pii> adj[100001]; int n,m,s,t,u,v; bool check(int x, int y, ll val) { //check if x and y are on the same shortest path return min(disS[x]+disT[y],disS[y]+disT[x])!=disS[t]-val; } void dij(int start, ll *dis) { for (int i=1; i<=n; ++i) dis[i]=1e18; bool vis[100001]; memset(vis,0,sizeof(vis)); priority_queue<pii, vector<pii>, greater<pii>> q; dis[start]=0; q.push(pii(0,start)); while (!q.empty()) { ll node=q.top().second; q.pop(); if (vis[node]) continue; vis[node]=true; for (auto s : adj[node]) { ll des=s.first, w=s.second; if (dis[des]>dis[node]+w) { dis[des]=dis[node]+w; q.push(pii(dis[des],des)); } } } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin>>n>>m>>s>>t>>u>>v; for (int i=0; i<m; ++i) { int a,b,w; cin>>a>>b>>w; adj[a].push_back(pii(b,w)); adj[b].push_back(pii(a,w)); } dij(s,disS); dij(t,disT); dij(v,disV); priority_queue<tu, vector<tu>, greater<tu>> q; bool vis[100001]; memset(vis,0,sizeof(vis)); ll ans=LLONG_MAX; for (int i=1; i<=n; ++i) disU[i]=1e18; disU[u]=0; q.push(tu(0,u,u,0)); int ans_node; while (!q.empty()) { int pre=get<1>(q.top()),now=get<2>(q.top()),dis=get<3>(q.top()); q.pop(); if (vis[now]) continue; vis[now]=true; ans=min(ans,disU[now]+disV[now]); for (auto s : adj[now]) { ll des=s.first, w=s.second; if (disS[pre]+disT[pre]==disS[t]) { if (disU[des]>disU[now]+w*check(pre,des,dis+w)) { disU[des]=disU[now]+w*check(pre,des,dis+w); q.push(tu(disU[des],now,des,w)); } } else { if (disU[des]>disU[now]+w*check(now,des,w)) { disU[des]=disU[now]+w*check(now,des,w); q.push(tu(disU[des],now,des,w)); } } } } cout<<ans; }

컴파일 시 표준 에러 (stderr) 메시지

commuter_pass.cpp: In function 'int main()':
commuter_pass.cpp:61:9: warning: unused variable 'ans_node' [-Wunused-variable]
   61 |     int ans_node;
      |         ^~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...