제출 #1326902

#제출 시각아이디문제언어결과실행 시간메모리
1326902bearrbearrEvacuation plan (IZhO18_plan)C++20
100 / 100
491 ms49988 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define ii pair<int,int> #define fir first #define sec second #define pb push_back const int maxn=1e5+2; vector<ii>adj[maxn]; int n,m,dist[maxn],dsu[maxn],ans[maxn],cost; map<int,int>mp[maxn]; int fin(int a){ if(dsu[a]==a)return a; return dsu[a]=fin(dsu[a]); } void merg(int a,int b){ a=fin(a),b=fin(b); if(a==b)return; if(mp[a].size()>mp[b].size())swap(a,b); dsu[a]=b; for(auto [id,brp] : mp[a]){ mp[b][id]+=brp; if(mp[b][id]==2){ ans[id]=max(ans[id],cost); } } mp[a].clear(); } signed main(){ ios_base::sync_with_stdio(0); cin.tie(0);cout.tie(0); cin>>n>>m; for(int q=1;q<=m;q++){ int u,v,w; cin>>u>>v>>w; adj[u].pb({v,w}); adj[v].pb({u,w}); } for(int q=1;q<=n;q++){ dist[q]=1e18; dsu[q]=q; } int slh; cin>>slh; priority_queue<ii,vector<ii>,greater<ii> >pq; for(int q=1;q<=slh;q++){ int a; cin>>a; dist[a]=0; pq.push({0,a}); } while(pq.size()){ auto[jrk,u]=pq.top(); pq.pop(); if(dist[u]!=jrk)continue; for(auto [x,w] : adj[u]){ if(dist[x]>jrk+w){ dist[x]=jrk+w; pq.push({dist[x],x}); } } } vector<ii>apa; for(int q=1;q<=n;q++)apa.pb({dist[q],q}); sort(apa.begin(),apa.end()); int qu;cin>>qu; for(int q=1;q<=qu;q++){ int u,v; cin>>u>>v; mp[u][q]++; mp[v][q]++; } while(apa.size()){ auto [jrk,_]=apa.back(); cost=jrk; while(apa.size() && apa.back().first==cost){ auto[hmm,id]=apa.back(); apa.pop_back(); for(auto [x,w] : adj[id]){ if(dist[x]>=cost){ merg(x,id); } } } } for(int q=1;q<=qu;q++){ cout<<ans[q]<<endl; } }
#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...