Submission #1040063

#TimeUsernameProblemLanguageResultExecution timeMemory
1040063ReLiceKeys (IOI21_keys)C++17
0 / 100
4 ms11356 KiB
#include <bits/stdc++.h> #define ll int #define pb push_back #define vll vector<ll> #define fr first #define sc second #define ins insert #define sz size() using namespace std; const int N = 2e5 + 7; const int inf = 1e9; vector<vector<pair<ll,ll>>> g(N); int p[N],siz[N]; vll have(N,0); vll vis(N,0); ll cen[N]; vector<ll> r; vector<vll> need(N); int anc(int a){ return (a == p[a] ? p[a] : p[a] = anc(p[a])); } bool uni(int a, int b){ a=anc(a); b=anc(b); if(a==b)return false; if(siz[a]>siz[b])swap(a,b); siz[b]+=siz[a]; p[a]=b; return true; } bool dfs(ll v){ vis[v]=1; if(have[r[v]]==0){ have[r[v]]=1; for(auto i : need[r[v]]){ if(vis[i])continue; if(uni(v,i)){ cen[anc(v)]=cen[anc(i)]; return true; } dfs(i); } } for(auto i : g[v]){ if(vis[i.fr])continue; if(have[i.sc]==0){ need[i.sc].pb(i.fr); continue; } if(uni(v,i.fr)){ cen[anc(v)]=cen[anc(i.fr)]; return true; } if(dfs(i.fr))return true; } return false; } vector<int> find_reachable(vector<int> R, vector<int> u, vector<int> v, vector<int> c) { r=R; int n = r.size(); int m=u.size(); for(int i=0;i<m;i++){ g[u[i]].pb({v[i],c[i]}); g[v[i]].pb({u[i],c[i]}); } vector<int> ans(n,0); int mn=inf; set<ll> st; for(int i=0;i<n;i++){ st.ins(i); p[i]=i; siz[i]=1; cen[i]=i; } while(st.sz){ vll v; for(auto i : st){ ans[i]=0; if(p[i]!=i){ v.pb(i); continue; } bool f=dfs(cen[i]); for(int j=0;j<n;j++){ if(vis[j])ans[i]++; have[j]=0; need[j].clear(); } if(p[i]!=i || !f)v.pb(i); if(!f) { for(int j=0;j<n;j++){ if(vis[j])ans[j]=ans[i]; } mn=min(mn,ans[i]); } for(int j=0;j<n;j++){ vis[j]=0; } } for(auto i : v){ st.erase(st.find(i)); } } for(int i=0;i<n;i++){ if(mn==ans[i])ans[i]=1; else ans[i]=0; } return ans; }
#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...