Submission #1090451

#TimeUsernameProblemLanguageResultExecution timeMemory
1090451imarnEvacuation plan (IZhO18_plan)C++14
100 / 100
743 ms58968 KiB
#include<bits/stdc++.h> #pragma GCC optimize("O3") #pragma GCC target("avx2") #define ll long long #define pii pair<int,int> #define pll pair<ll,ll> #define plx pair<ll,int> #define f first #define s second #define pb push_back #define all(x) x.begin(),x.end() #define vi vector<int> #define vl vector<ll> #define vvi vector<vi> using namespace std; const int mxn=1e5+5; vector<pii>g[mxn]; int d[mxn],l[mxn],r[mxn];pii ask[mxn]; int pr[mxn]; int get(int r){ return pr[r]==r?r:pr[r]=get(pr[r]); } int main(){ ios_base::sync_with_stdio(0);cin.tie(0); int n,m;cin>>n>>m;vector<pair<int,pii>>ed; for(int i=1,a,b,w;i<=m;i++){ cin>>a>>b>>w;g[a].pb({b,w});g[b].pb({a,w});ed.pb({0,{a,b}}); }priority_queue<pii,vector<pii>,greater<pii>>pq; for(int i=1;i<=n;i++)d[i]=1e9; int k;cin>>k; for(int i=1,u;i<=k;i++){ cin>>u;d[u]=0;pq.push({d[u],u}); } while(!pq.empty()){ auto u=pq.top();pq.pop(); if(u.f>d[u.s])continue; for(auto v:g[u.s]){ if(d[v.f]>u.f+v.s)d[v.f]=u.f+v.s,pq.push({d[v.f],v.f}); } } for(int i=0;i<ed.size();i++)ed[i].f=min(d[ed[i].s.f],d[ed[i].s.s]); sort(ed.rbegin(),ed.rend()); int q;cin>>q; for(int i=1;i<=q;i++)cin>>ask[i].f>>ask[i].s,l[i]=1,r[i]=ed.size(); bool done=0;vector<int>qr[(int)ed.size()+1]; while(!done){ done=1;iota(pr,pr+n+1,0); for(int i=1;i<=q;i++){ if(l[i]==r[i])continue; done=0;qr[(l[i]+r[i])>>1].pb(i); }if(done)break; for(int i=1;i<=ed.size();i++){ pr[get(ed[i-1].s.f)]=pr[get(ed[i-1].s.s)]; for(auto it : qr[i]){ if(get(ask[it].f)==get(ask[it].s))r[it]=i; else l[it]=i+1; }qr[i].clear(); } } for(int i=1;i<=q;i++)cout<<ed[l[i]-1].f<<'\n'; }

Compilation message (stderr)

plan.cpp: In function 'int main()':
plan.cpp:41:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, std::pair<int, int> > >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   41 |     for(int i=0;i<ed.size();i++)ed[i].f=min(d[ed[i].s.f],d[ed[i].s.s]);
      |                 ~^~~~~~~~~~
plan.cpp:52:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, std::pair<int, int> > >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   52 |         for(int i=1;i<=ed.size();i++){
      |                     ~^~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...