Submission #766092

#TimeUsernameProblemLanguageResultExecution timeMemory
766092tengiz05Werewolf (IOI18_werewolf)C++17
15 / 100
1298 ms524288 KiB
#include "werewolf.h" #include "iostream" #include "array" #include "queue" #include "algorithm" #ifndef EVAL #include "grader.cpp" #endif using namespace std; constexpr int B = 300; struct DSUmin { int n; vector<int> p; DSUmin(int n) : n(n), p(n) { for (int i = 0; i < n; i++) p[i] = i; } int leader(int u) { while (u != p[u]) u = p[u] = p[p[u]]; return u; } void merge(int u, int v) { u = leader(u); v = leader(v); if (u == v) return; p[v] = u; } }; struct DSU { int n; vector<int> p, siz; vector<vector<int>> f; DSU(int n) : n(n), p(n), siz(n), f(n) { for (int i = 0; i < n; i++) { siz[i] = 1; p[i] = i; f[i].push_back(i); } } int leader(int u) { while (u != p[u]) u = p[u] = p[p[u]]; return u; } void merge(int u, int v) { u = leader(u); v = leader(v); if (u == v) return; if (siz[v] > siz[u]) swap(u, v); for (int x : f[v]) { f[u].push_back(x); } f[v].clear(); f[v].shrink_to_fit(); p[v] = u; } }; std::vector<int> check_validity(int n, std::vector<int> X, std::vector<int> Y, std::vector<int> S, std::vector<int> E, std::vector<int> L, std::vector<int> R) { int m = X.size(); vector<vector<int>> e(n); for (int i = 0; i < m; i++) { e[X[i]].push_back(Y[i]); e[Y[i]].push_back(X[i]); } int Q = S.size(); vector<int> ans(Q); vector<vector<array<int, 4>>> q(n); for (int i = 0; i < Q; i++) { q[R[i]].push_back({i, S[i], E[i], L[i]}); } DSU dsu(n); vector<vector<array<int, 3>>> nq(n); for (int i = 0; i < n; i++) { for (int j : e[i]) { if (j < i) { dsu.merge(i, j); } } for (auto [id, s, t, L] : q[i]) { for (int x : dsu.f[dsu.leader(t)]) { nq[L].push_back({id, s, x}); } } } DSUmin fastdsu(n); for (int i = n - 1; i >= 0; i--) { for (int j : e[i]) { if (j > i) { fastdsu.merge(i, j); } } for (auto [id, s, x] : nq[i]) { if (fastdsu.leader(x) == fastdsu.leader(s)) { ans[id] = 1; } } } return ans; } /* 6 6 3 5 1 1 2 1 3 3 4 3 0 5 2 4 2 1 2 4 2 2 2 5 4 3 4 */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...