Submission #592036

#TimeUsernameProblemLanguageResultExecution timeMemory
592036SlavicGKeys (IOI21_keys)C++17
37 / 100
3089 ms49500 KiB
#include "bits/stdc++.h" using namespace std; using ll = long long; #define forn(i, n) for(int i = 0; i < n; ++i) #define sz(a) (int)a.size() #define pb push_back #define all(a) a.begin(), a.end() const int N = 3e5 + 10; vector<pair<int, int>> adj[N]; int cnt[N], s; bool vis[N]; set<int> require[N]; set<int> already; int mn = INT_MAX; void dfs(int u, vector<int>& r) { assert(vis[u] == false); vis[u] = true; ++cnt[s]; if(cnt[s] > mn) return; if(!already.count(r[u])) { for(auto x: require[r[u]]) { if(!vis[x]) { dfs(x, r); } } } already.insert(r[u]); for(auto x: adj[u]) { int v = x.first, c = x.second; if(!vis[v]) { if(already.count(c)) { dfs(v, r); } else { require[c].insert(v); } } } } void solve(int start, vector<int>& r) { already.clear(); s = start; forn(i, sz(r)) require[i].clear(); forn(i, sz(r)) vis[i] = false; dfs(start, r); mn = min(mn, cnt[start]); } vector<int> find_reachable(vector<int> r, vector<int> u, vector<int> v, vector<int> c) { for(int i = 0; i < sz(u); ++i) { adj[u[i]].pb({v[i], c[i]}); adj[v[i]].pb({u[i], c[i]}); } int n = sz(r); vector<int> ans(n, 1); vector<int> amogus(n, 0); iota(all(amogus), 0); for(int i: amogus) solve(i, r); forn(i, n) ans[i] = cnt[i]; int x = *min_element(all(ans)); for(int& i: ans) i = (i == x ? 1 : 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...