Submission #294028

#TimeUsernameProblemLanguageResultExecution timeMemory
294028amoo_safarWerewolf (IOI18_werewolf)C++17
15 / 100
4067 ms74432 KiB
#include "werewolf.h" #include <bits/stdc++.h> #define F first #define S second #define pb push_back #define all(x) x.begin(), x.end() using namespace std; typedef pair<int, int> pii; typedef vector<int> vi; const int N = 2e5 + 10; int par[N], pos[N]; vector<int> C[N]; int Find(int u){ if(par[u] == u) return u; return par[u] = Find(par[u]); } void Unite(int u, int v){ u = Find(u); v = Find(v); if(u == v) return ; if(C[u].size() < C[v].size()) swap(u, v); par[v] = u; for(auto x : C[v]){ pos[x] = C[u].size(); C[u].pb(x); } C[v].clear(); } int n; vi G[N]; pii res[N], s1[N], s2[N]; vector<pii> Q[N]; vi dsuArray(vi ord){ vi mk(n, 0); for(int i : ord){ par[i] = i; C[i] = {i}; pos[i] = 0; for(int adj : G[i]) if(mk[adj]) Unite(adj, i); for(auto X : Q[i]){ res[X.S] = {-pos[X.F], C[Find(X.F)].size() - pos[X.F]}; } mk[i] = 1; } return C[Find(0)]; } vi DR, DL; vi check_validity(int _n, vi X, vi Y, vi S, vi E, vi L, vi R){ n = _n; int m = X.size(); int q = S.size(); for(int i = 0; i < m; i++) G[X[i]].pb(Y[i]), G[Y[i]].pb(X[i]); vi O; for(int i = 0; i < n; i++) O.pb(i); for(int i = 0; i < n; i++) Q[i].clear(); for(int i = 0; i < q; i++) Q[R[i]].pb({E[i], i}); DR = dsuArray(O); for(int i = 0; i < q; i++) s1[i] = {res[i].F + pos[E[i]], res[i].S + pos[E[i]]}; reverse(all(O)); for(int i = 0; i < n; i++) Q[i].clear(); for(int i = 0; i < q; i++) Q[L[i]].pb({S[i], i}); DL = dsuArray(O); for(int i = 0; i < q; i++) s2[i] = {res[i].F + pos[S[i]], res[i].S + pos[S[i]]}; //cerr << "! "; //for(auto x : DR) cerr << x << ' '; //cerr << '\n'; //for(int i = 0; i < q; i++) cerr << "# " << s1[i].F << ' ' << s1[i].S << '\n'; vi ans; for(int i = 0; i < q; i++){ bool fl = false; for(int j = s1[i].F; j < s1[i].S; j++) for(int k = s2[i].F; k < s2[i].S; k++) fl |= (DR[j] == DL[k]); ans.pb(fl); } 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...