Submission #1290315

#TimeUsernameProblemLanguageResultExecution timeMemory
1290315MMihalevKeys (IOI21_keys)C++20
9 / 100
677 ms79744 KiB
#include<iostream> #include<algorithm> #include <vector> #include<set> #include "keys.h" using namespace std; const int MAX_N=3e5+5; int parent[MAX_N]; int sz[MAX_N]; set<int>keys[MAX_N]; vector<int>nodes[MAX_N]; vector<pair<int,pair<int,int>>>edges; set<int>parents; int Find(int u) { if(parent[u]==u)return u; return parent[u]=Find(parent[u]); } void Merge(int u,int v) { int urt=Find(u); int vrt=Find(v); if(urt==vrt)return; if(sz[urt]>sz[vrt])swap(urt,vrt); parent[urt]=vrt; parents.erase(urt); sz[vrt]+=sz[urt]; for(int key:keys[urt])keys[vrt].insert(key); for(int node:nodes[urt])nodes[vrt].push_back(node); set<int>().swap(keys[urt]); vector<int>().swap(nodes[urt]); } std::vector<int> find_reachable(std::vector<int> r, std::vector<int> u, std::vector<int> v, std::vector<int> c) { int n=r.size(),m=u.size(); vector<int>ans; ans.resize(n); for(int i=0;i<n;i++) { parent[i]=i; sz[i]=1; nodes[i].push_back(i); keys[i].insert(r[i]); parents.insert(i); } for(int i=0;i<m;i++) { edges.push_back({c[i],{u[i],v[i]}}); } for(int times=0;times<20;times++) { vector<int>cnt; cnt.resize(n); bool stop=0; for(auto [c,edge]:edges) { int u=edge.first,v=edge.second; int urt=Find(u); int vrt=Find(v); if(urt==vrt)continue; if(keys[urt].count(c))cnt[urt]=1; if(keys[vrt].count(c))cnt[vrt]=1; } int curmin=1e9; vector<int>curminnodes; for(int u:parents) { if(!cnt[u]) { stop=1; if(sz[u]<curmin) { curmin=sz[u]; curminnodes=nodes[u]; } else if(sz[u]==curmin) { for(int v:nodes[u])curminnodes.push_back(v); } } } if(stop) { for(int u:curminnodes)ans[u]=1; return ans; } for(auto [c,edge]:edges) { int u=edge.first,v=edge.second; int urt=Find(u); int vrt=Find(v); if(urt==vrt)continue; Merge(urt,vrt); } } }

Compilation message (stderr)

keys.cpp: In function 'std::vector<int> find_reachable(std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>)':
keys.cpp:110:1: warning: control reaches end of non-void function [-Wreturn-type]
  110 | }
      | ^
#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...