제출 #815404

#제출 시각아이디문제언어결과실행 시간메모리
815404errayWerewolf (IOI18_werewolf)C++17
15 / 100
4101 ms23152 KiB
#include "werewolf.h" //author: erray #include <bits/stdc++.h> using namespace std; #ifdef DEBUG #include "/home/ioi/codes/debug.h" #else #define debug(...) (void) 37 #endif struct DSU { vector<int> link; DSU(int n) { link.resize(n); iota(link.begin(), link.end(), 0); } int get(int v) { return link[v] = (v == link[v] ? v : get(link[v])); } bool unite(int x, int y) { x = get(x), y = get(y); if (x == y) { return false; } link[y] = x; return true; } }; 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 = int(X.size()); int Q = int(E.size()); vector<vector<int>> g(N); for (int i = 0; i < M; ++i) { g[X[i]].push_back(Y[i]); g[Y[i]].push_back(X[i]); } vector<int> ans(Q); for (int q = 0; q < Q; ++q) { DSU eg(N), sg(N); for (int i = 0; i <= R[q]; ++i) { for (auto u : g[i]) { if (u < i) { eg.unite(i, u); } } } for (int i = N - 1; i >= L[q]; --i) { for (auto u : g[i]) { if (u > i) { sg.unite(i, u); } } } for (int i = 0; i < N; ++i) { ans[q] |= (eg.get(i) == eg.get(E[q]) && sg.get(i) == sg.get(S[q])); } } 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...