제출 #1198141

#제출 시각아이디문제언어결과실행 시간메모리
1198141dubabubaWerewolf (IOI18_werewolf)C++20
15 / 100
577 ms9796 KiB
#include "werewolf.h" #include <bits/stdc++.h> using namespace std; typedef pair<int, int> pii; typedef vector<int> vi; const int mxn = 3030; int n, m, q, par[mxn]; int parent(int u) { return par[u] < 0 ? u : par[u] = parent(par[u]); } bool unite(int u, int v, string debug = "") { if(debug.size()) { cout << debug << ": " << u << ' ' << v << endl; } u = parent(u); v = parent(v); if(u == v) return 0; if(par[u] > par[v]) swap(u, v); par[u] += par[v]; par[v] = u; return 1; } vi check_validity(int N, vi X, vi Y, vi S, vi E, vi L, vi R) { n = N; m = X.size(); q = S.size(); vi ret; for(int i = 0; i < q; i++) { int s = S[i]; int e = E[i]; int l = L[i]; int r = R[i]; memset(par, -1, sizeof(int) * n); for(int i = 0; i < m; i++) { if(X[i] >= l && Y[i] >= l) unite(X[i], Y[i]); } bitset<mxn> st = 0; for(int i = l; i <= r; i++) if(parent(i) == parent(s)) st[i] = 1; memset(par, -1, sizeof(int) * n); for(int i = 0; i < m; i++) { if(X[i] <= r && Y[i] <= r) unite(X[i], Y[i]); } bitset<mxn> en = 0; for(int i = 0; i < n; i++) if(parent(i) == parent(e)) en[i] = 1; bitset<mxn> cnt = st & en; if(cnt.count()) ret.push_back(1); else ret.push_back(0); } return ret; } /* 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...