제출 #1016369

#제출 시각아이디문제언어결과실행 시간메모리
1016369sun2305Commuter Pass (JOI18_commuter_pass)C++14
100 / 100
343 ms34748 KiB
#include <bits/stdc++.h> #define ll long long #define se second #define fi first #define pll pair<ll,ll> #define maxn 100005 #define task "XEBUYT" using namespace std; const ll inf=1e18; ll n,m,s,t,u,v,du[maxn],dv[maxn],ans,ds[maxn],dp[3][maxn]; bool vs[maxn]; vector<pll> g[maxn]; void djk1(ll st,ll d[]){ priority_queue<pll> q; fill(vs,vs+maxn,false); q.push({0,st}); while(!q.empty()){ ll node,w; tie(w,node)=q.top(); q.pop(); if(!vs[node]){ vs[node]=true; d[node]=-w; for(pll it:g[node]) q.push({w-it.se,it.fi}); } } } void djk2(ll st, ll ed){ priority_queue<pair<ll,pll>> q; fill(vs,vs+maxn,false); fill(dp[0], dp[0] + 100001, LLONG_MAX / 2); fill(dp[1], dp[1] + 100001, LLONG_MAX / 2); dp[0][0]=dp[1][0]= inf; q.push({0,{st,0}}); while(!q.empty()){ ll w,node,par;pll p; tie(w,p)=q.top(); tie(node,par)=p; q.pop(); if(!vs[node]){ vs[node]=true; ds[node]=-w; dp[0][node]=min(du[node],dp[0][par]); dp[1][node]=min(dv[node],dp[1][par]); for(pll it:g[node]) q.push({w-it.se,{it.fi,node}}); } else if(-w==ds[node] and min(dp[0][par],du[node])+min(dv[node],dp[1][par])<=dp[1][node]+dp[0][node]){ dp[0][node]=min(dp[0][par],du[node]); dp[1][node]=min(dv[node],dp[1][par]); } } ans=min(ans,dp[0][ed]+dp[1][ed]); } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); if(fopen(task".INP","r")){ freopen(task".INP","r",stdin); freopen(task".OUT","w",stdout); } cin>>n>>m>>s>>t>>u>>v; for(long i=0;i<m;i++){ ll a,b,c; cin>>a>>b>>c; g[a].push_back({b,c}); g[b].push_back({a,c}); } djk1(u,du); djk1(v,dv); ans=du[v]; djk2(s,t); djk2(t,s); cout<<ans; return 0; }

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

commuter_pass.cpp: In function 'int main()':
commuter_pass.cpp:71:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   71 |     freopen(task".INP","r",stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
commuter_pass.cpp:72:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   72 |     freopen(task".OUT","w",stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...