# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
964080 | oblantis | 늑대인간 (IOI18_werewolf) | C++17 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
//#pragma gcc target("avx2,bmi,bmi2,lzcnt,popcnt")
//#pragma gcc optimize("o3,unroll-loops")
#include <bits/stdc++.h>
#define all(v) v.begin(), v.end()
#define pb push_back
#define ss second
#define ff first
#define vt vector
#define uid(a, b) uniform_int_distribution<int>(a, b)(mt)
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
const ll inf = 1e18;
const int mod = 1e9+7;
const int maxn = 2e5;
mt19937 mt(chrono::steady_clock::now().time_since_epoch().count());
void solve() {
}
#include "werewolf.h"
vt<int> s[maxn], g[maxn], eg[maxn], g[maxn];
int n, q, m, i1[maxn], i2[maxn], p[maxn], sz[maxn], cnt, xl[maxn], xr[maxn];
bool was[maxn];
int get(int v){
if(p[v] == v)return v;
return (p[v] = get(p[v]));
}
void go(int v){
i1[v] = cnt++;
was[v] = 1;
for(auto i : g[v]){
if(!was[i]){
go(i);
}
}
}
int cl(int v){
if(v == -1 || xl[v] == v)return v;
return (xl[v] = cl(xl[v]));
}
int cr(int v){
if(v == n || xr[v] == v)return v;
return (xr[v] = cr(xr[v]));
}
vt<int> check_validity(int n, vt<int> x, vt<int> y,
vt<int> s, vt<int> e,
vt<int> l, vt<int> r) {
n = n, q = s.size(), m = x.size();
vt<int> a(q, 0);
for(int i = 0; i < q; ++i) {
s[l[i]].pb(i);
}
for(int i = 0; i < m; i++){
if(y[i] > x[i])swap(x[i], y[i]);
g[x[i]].pb(y[i]);
eg[y[i]].pb(x[i]);
}
for(int i = 0; i < n; i++){
p[i] = sz[i] = -1;
}
for(int i = n - 1; i >= 0; i--){
p[i] = i, sz[i] = 1;
for(auto j : g[i]){
int u = get(i), v = get(j);
if(u == v)continue;
g[i].pb(j);
if(sz[u] > sz[v])swap(u, v);
p[u] = v, sz[v] += sz[u];
}
}
for(int i = 0; i < n; i++){
if(!was[i]){
go(i);
}
xl[i] = xr[i] = i;
}
for(int i = n - 1; i >= 0; i--){
xl[i1[i]] = i1[i] - 1;
xr[i1[i]] = i1[i] + 1;
cl(i1[i]);
cr(i1[i]);
for(auto j : s[i]){
cl(i1[s[j]]), cr(i1[s[j]]);
rng1[j] = {xl[i1[s[j]]] + 1, xr[i1[s[j]]] - 1};
}
}
return a;
}
int main() {
ios_base::sync_with_stdio(0); cin.tie(0);
int times = 1; //cin >> times;
for(int i = 1; i <= times; i++) {
solve();
}
return 0;
}