Submission #788184

#TimeUsernameProblemLanguageResultExecution timeMemory
788184APROHACKWerewolf (IOI18_werewolf)C++17
15 / 100
4014 ms21368 KiB
#include "werewolf.h" #include <bits/stdc++.h> #define ll long long #define ff first #define ss second #define pb push_back using namespace std; int n, m, q; int rep[200001][2]; vector<pair<int, int> >edjes; int findd(int u, short cual){ if(rep[u][cual] == u)return u; return rep[u][cual] = findd(rep[u][cual], cual); } void joinn(int a, int b, short cual){ a = findd(a, cual); b = findd(b, cual); if(a == b)return ; rep[a][cual] = b; } 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) { n = N; m = X.size(); q = S.size(); for(int i = 0 ; i < m ; i ++){ edjes.pb({X[i], Y[i]}); } vector<int>A; for(int query = 0 ; query < q ; query ++){ for(int i = 0 ; i < n ; i ++){ rep[i][0] = i; rep[i][1] = i; } for(int i = 0 ; i < m ; i ++){ if(X[i] <= R[query] and Y[i] <= R[query]){ joinn(X[i], Y[i], 0); } if(X[i] >= L[query] and Y[i] >= L[query]){ joinn(X[i], Y[i], 1); } } bool posible = false; S[query] = findd(S[query], 1); E[query] = findd(E[query], 0); for(int i = L[query] ; i <= R[query] ; i ++){ if(findd(i, 1) == S[query] and findd(i, 0) == E[query]){ posible = true; break; } } if(posible)A.pb(1); else A.pb(0); } return A; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...