Submission #1174899

#TimeUsernameProblemLanguageResultExecution timeMemory
1174899gygKeys (IOI21_keys)C++20
0 / 100
53 ms14664 KiB
#include "keys.h" #include <bits/stdc++.h> using namespace std; #define vec vector #define arr array #define pii pair<int, int> #define fir first #define sec second #define hset unordered_set #define hmap unordered_map const int N = 3e5 + 5, INF = 1e9; // Zero indexing int n; arr<int, N> cl; arr<vec<pii>, N> adj; // arr<bool, N> vs; // arr<vec<int>, N> ngh; // set<int> cls; // vec<int> ord; // void cnt_cmp(int st) { // vs.fill(false), ngh.fill({}), cls.clear(), ord.clear(); // vs[st] = true, ord.push_back(st); // while (ord.size()) { // int u = ord.back(); ord.pop_back(); // for (pii x : adj[u]) { // if (cls.count(x.sec)) { // if (vs[x.fir]) continue; // vs[x.fir] = true; // ord.push_back(x.fir); // } else { // ngh[x.sec].push_back(x.fir); // } // } // if (cls.count(cl[u])) continue; // cls.insert(cl[u]); // for (int v : ngh[cl[u]]) { // if (vs[v]) continue; // vs[v] = true; // ord.push_back(v); // } // } // } // hset<int> vs; // set<int> cls; // hmap<int, vec<int>> ngh; // vec<int> ord; arr<bool, N> vs; arr<vec<int>, N> ngh; set<int> cls; vec<int> ord; void bfs(int st) { vs.fill(false), ngh.fill({}), cls.clear(), ord.clear(); vs[st] = true, ord.push_back(st); // vs.clear(), cls.clear(), ngh.clear(), ord.clear(); // vs.insert(st), ord.push_back(st); while (ord.size()) { int u = ord.back(); ord.pop_back(); // for (pii x : adj[u]) { // int v = x.fir, c = x.sec; // if (cls.count(c)) { // if (vs[v]) continue; // vs[v] = true, ord.push_back(v); // } else { // ngh[c].push_back(v); // } // } for (pii x : adj[u]) { if (cls.count(x.sec)) { if (vs[x.fir]) continue; vs[x.fir] = true; ord.push_back(x.fir); } else { ngh[x.sec].push_back(x.fir); } } if (cls.count(cl[u])) return; cls.insert(cl[u]); for (int v : ngh[cl[u]]) { if (vs[v]) continue; vs[v] = true, ord.push_back(v); } } } arr<int, N> cnt; void cnt_cmp() { for (int u = 0; u < n; u++) { bfs(u); cnt[u] = accumulate(vs.begin(), vs.begin() + n, 0); // cnt[u] = vs.size(); } } vec<int> find_reachable(vec<int> _cl, vec<int> _u, vec<int> _v, vec<int> _c) { n = _cl.size(); for (int u = 0; u < n; u++) cl[u] = _cl[u]; for (int i = 0; i < _u.size(); i++) { int u = _u[i], v = _v[i], c = _c[i]; adj[u].push_back({v, c}); adj[v].push_back({u, c}); } cnt_cmp(); vec<int> ans(n); int mn = *min_element(cnt.begin(), cnt.begin() + n); for (int u = 0; u < n; u++) if (cnt[u] == mn) ans[u] = 1; 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...