Submission #1044404

#TimeUsernameProblemLanguageResultExecution timeMemory
1044404UnforgettableplKeys (IOI21_keys)C++17
20 / 100
1123 ms123440 KiB
#include <bits/stdc++.h> using namespace std; vector<int> find_reachable(vector<int> r,vector<int> u,vector<int> v,vector<int> c){ int n = r.size(); int m = u.size(); int S = n; map<pair<int,int>,int> lookup; vector<vector<int>> adj(n); vector<vector<int>> readj(n); for(int i=0;i<n;i++){ lookup[{i,r[i]}]=i; } for(int i=0;i<m;i++){ if(lookup.count({u[i],c[i]})==0){ lookup[{u[i],c[i]}]=S; adj.emplace_back(); readj.emplace_back(); adj[S].emplace_back(u[i]); readj[u[i]].emplace_back(S); S++; } if(lookup.count({v[i],c[i]})==0){ lookup[{v[i],c[i]}]=S; adj.emplace_back(); readj.emplace_back(); adj[S].emplace_back(v[i]); readj[v[i]].emplace_back(S); S++; } int actu = lookup[{u[i],c[i]}]; int actv = lookup[{v[i],c[i]}]; adj[actu].emplace_back(actv); readj[actv].emplace_back(actu); adj[actv].emplace_back(actu); readj[actu].emplace_back(actv); } vector<int> order; vector<bool> visited(S); { function<void(int)> dfs = [&](int x){ if(visited[x])return; visited[x]=true; for(int&i:adj[x])dfs(i); order.emplace_back(x); }; for(int i=0;i<S;i++)dfs(i); reverse(order.begin(),order.end()); } vector<vector<int>> components = {{}}; vector<int> mycompo(S); vector<bool> disq(1); function<void(int,int)> dfs = [&](int x,int compo){ if(mycompo[x]){ if(mycompo[x]!=compo)disq[mycompo[x]]=true; return; } mycompo[x]=compo; if(x<n)components[compo].emplace_back(x); for(int&i:readj[x])dfs(i,compo); }; int compocnt = 0; for(int&i:order){ if(mycompo[i])continue; disq.emplace_back(false); components.emplace_back(); dfs(i,++compocnt); } int ans = n; for(int i=1;i<=compocnt;i++){ if(!disq[i])ans=min(ans,(int)components[i].size()); } vector<int> res(n); for(int i=1;i<=compocnt;i++){ if(disq[i])continue; if(components[i].size()>ans)continue; for(int&x:components[i])res[x]=1; } return res; }

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:76:26: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   76 |   if(components[i].size()>ans)continue;
      |      ~~~~~~~~~~~~~~~~~~~~^~~~
#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...