제출 #1236798

#제출 시각아이디문제언어결과실행 시간메모리
1236798nikd늑대인간 (IOI18_werewolf)C++20
15 / 100
339 ms589824 KiB
#include "werewolf.h" #include <bits/stdc++.h> using namespace std; struct dsu{ vector<int> p; vector<int> sz; dsu(int n){ p.resize(n); iota(p.begin(), p.end(), 0); sz.resize(n, 1); } int find(int v){ return p[v] == v ? v : p[v] = find(p[v]); } void merge(int a, int b){ a = find(a); b = find(b); if(a==b) return; if(sz[a] < sz[b]) swap(a, b); p[b] = a; sz[a] += sz[b]; return; } }; 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) { vector<dsu> l(N, dsu(N)); vector<dsu> r(N, dsu(N)); vector<vector<int>> adj(N); for(int i = 0; i<X.size(); i++){ adj[X[i]].push_back(Y[i]); adj[Y[i]].push_back(X[i]); } for(int i = N-1; i>=0; i--){ if(i<N-1) l[i] = l[i+1]; for(int u: adj[i]){ if(u>i) l[i].merge(i, u); } } for(int i= 0; i<N; i++){ if(i>0) r[i] = r[i-1]; for(int u: adj[i]){ if(u<i) r[i].merge(i, u); } } vector<int> sol(S.size(), 0); for(int i = 0; i<S.size(); i++){ for(int j = L[i]; j<=R[i]; j++){ if(l[L[i]].find(j) == l[L[i]].find(S[i]) && r[R[i]].find(j) == r[R[i]].find(E[i])) sol[i] = 1; } } return sol; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...