제출 #782168

#제출 시각아이디문제언어결과실행 시간메모리
7821688pete8Commuter Pass (JOI18_commuter_pass)C++14
0 / 100
289 ms262144 KiB
#include<bits/stdc++.h> using namespace std; #define ll long long #define f first #define s second #define pb push_back #define p push #define pii pair<int,int> #define ppii pair<int,pii> #define fastio ios::sync_with_stdio(false);cin.tie(NULL); #define set(x) memset(x,-1,sizeof(x)); const int mxn=1e5+1,mod=1e9+7; #define int long long int n,m,s,t,u,v,sz,cost,ans=-1; vector<int> pa[mxn+10]; vector<pii>adj[mxn+10]; vector<bitset<mxn+10>>path; bitset<mxn+10>vis,vis2[mxn+10]; void dijk(){ vector<int>dist(n+1,-1); priority_queue<pii,vector<pii>,greater<pii>>pq; dist[s]=0; pq.p({0,s}); while(!pq.empty()){ int cur=pq.top().s; pq.pop(); if(vis[cur])continue; if(cur==t)break; vis[cur]=true; for(auto i:adj[cur]){ if(dist[i.f]==-1||dist[i.f]>dist[cur]+i.s){ dist[i.f]=dist[cur]+i.s; pa[i.f].clear(); pa[i.f].pb(cur); pq.p({dist[i.f],i.f}); } else if(dist[i.f]==dist[cur]+i.s)pa[i.f].pb(cur); } } } void solve(){ vector<vector<int>>dp(n+1,vector<int>(sz+1,-1)); priority_queue<ppii,vector<ppii>,greater<ppii>>pq; for(int i=0;i<path.size();i++)pq.p({0,{u,i}}),dp[u][i]=0; while(!pq.empty()){ int cur=pq.top().s.f,comp=pq.top().s.s; pq.pop(); if(cur==v){ if(ans==-1)ans=dp[cur][comp]; else ans=min(ans,dp[cur][comp]); continue; } if(vis2[cur][comp])continue; vis2[cur][comp]=true; for(auto i:adj[cur]){ cost=i.s; if(path[comp][cur]&&path[comp][i.f]){ cost=0; } if(dp[i.f][comp]==-1||dp[i.f][comp]>dp[cur][comp]+cost)dp[i.f][comp]=dp[cur][comp]+cost,pq.p({dp[i.f][comp],{i.f,comp}}); } } } int32_t main(){ fastio cin>>n>>m>>s>>t>>u>>v; while(m--){ int a,b,c;cin>>a>>b>>c; adj[a].pb({b,c}); adj[b].pb({a,c}); } queue<pair<int,bitset<mxn+10>>>q; dijk(); vis.reset(); q.p({t,vis}); while(!q.empty()){ q.front().s[q.front().f]=true; for(auto i:pa[q.front().f])q.p({i,q.front().s}); if(q.front().f==s)path.pb(q.front().s); q.pop(); } solve(); cout<<ans; return 0; }

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

commuter_pass.cpp: In function 'void solve()':
commuter_pass.cpp:44:18: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::bitset<100011> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   44 |     for(int i=0;i<path.size();i++)pq.p({0,{u,i}}),dp[u][i]=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...