Submission #1299482

#TimeUsernameProblemLanguageResultExecution timeMemory
1299482islam_555111Evacuation plan (IZhO18_plan)C++20
100 / 100
676 ms58040 KiB
#include <bits/stdc++.h> using namespace std; using ll=long long; const ll N=1e5+10; const ll INF=1e15; #define F first #define S second vector<pair<ll,ll>>g[N]; ll d[N]; ll p[N],sz[N]; ll get(ll v){ if(v==p[v])return v ; return p[v]=get(p[v]); } void alpha(ll v, ll u) { v=get(v); u=get(u); if (u==v) return; if (sz[u]<sz[v])swap(u,v); p[v]=u; sz[u]+=sz[v]; return; } ll used[N]; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); ll n,m; cin>>n>>m; for(int i=1;i<=n;i++){ d[i]=INF; } ll u[m+1],v[m+1],w[m+1]; for(int i=1;i<=m;i++){ cin>>u[i]>>v[i]>>w[i]; g[u[i]].push_back({v[i],w[i]}); g[v[i]].push_back({u[i],w[i]}); } ll k; cin>>k; set<pair<ll,ll>>st; for(int i=1;i<=k;i++){ ll x; cin>>x; d[x]=0; st.insert({0,x}); } while(st.size()>0){ auto CUR=st.begin(); pair<ll,ll>cur=*CUR; st.erase(st.begin()); if(cur.F>d[cur.S])continue; for(auto to : g[cur.S]){ if(d[to.first]>d[cur.S]+to.second){ d[to.first]=d[cur.S]+to.second; st.insert({d[cur.S]+to.second,to.first}); } } } vector<pair<ll,ll>>VEC; for(int i=1;i<=n;i++){ VEC.push_back({d[i],i}); } for(int i=1;i<=n;i++){ sz[i]=1; p[i]=i; } sort(VEC.begin(),VEC.end()); ll q; cin>>q; ll s[q+1],t[q+1],l[q+1],r[q+1],mid[q+1]; for(int i=1;i<=q;i++){ cin>>s[i]>>t[i]; l[i]=1; r[i]=n; } ll ans[q+1]; while(true){ for(int i=1;i<=n;i++){ p[i]=i; used[i]=0; sz[i]=1; } vector<ll>vec[n+1]; for(int i=1;i<=n;i++)vec[i].clear(); ll ok=1; for(int i=1;i<=q;i++){ if(r[i]>=l[i])ok=0; mid[i]=(l[i]+r[i])>>1; vec[mid[i]].push_back(i); } if(ok)break; for(int i=n;i>=1;i--){ used[VEC[i-1].second]=1; for(auto to : g[VEC[i-1].second]){ if(used[to.first])alpha(to.first,VEC[i-1].second); } for(auto j : vec[i]){ if(get(s[j])==get(t[j])){ ans[j]=VEC[i-1].first; l[j]=mid[j]+1; } else { r[j]=mid[j]-1; } } } } for(int i=1;i<=q;i++){ cout<<ans[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...