답안 #1034066

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1034066 2024-07-25T09:25:14 Z juicy 동기화 (JOI13_synchronization) C++17
0 / 100
193 ms 24916 KB
#include <bits/stdc++.h>
 
using namespace std;
 
#ifdef LOCAL
#include "debug.h"
#else
#define debug(...) 42
#endif
 
const int N = 1e5 + 5, LG = 17;
 
int n, m, q;
int tin[N], tout[N], pr[LG][N], s[N], lst[N], sz[N], dep[N];
bool vs[N];
array<int, 2> edges[N];
vector<int> g[N];
 
void upd(int i, int x) {
	for (; i <= n; i += i & -i) {
		s[i] += x;
	}
}
 
void upd(int i, int j, int x) {
	upd(i, x);
	upd(j + 1, -x);
}
 
int qry(int i) {
	assert(i);
	int res = 0;
	for (; i; i -= i & -i) {
		res += s[i];
	}
	return res;
}
 
int order;
 
void dfs(int u) {
	tin[u] = ++order;
	for (int v : g[u]) {
		if (v != pr[0][u]) {
			pr[0][v] = u;
			for (int j = 1; j < LG; ++j) {
				pr[j][v] = pr[j - 1][pr[j - 1][v]];
			}
			dep[v] = dep[u] + 1;
			dfs(v);
		}
	}
	tout[u] = order;
}
 
int get(int u) {
	int x = qry(tin[u]);
	for (int j = LG - 1; ~j; --j) {
		if (pr[j][u] && qry(tin[pr[j][u]]) == x) {
			u = pr[j][u];
		}
	}
	return u;
}
 
void add(int u, int x) {
	upd(tin[u], tout[u], x);
}
 
void mrg(int u, int v, int id) {
	u = get(u);
	sz[u] += sz[v] - lst[id];
}
 
void cut(int u, int v, int id) {
	u = get(u);
	lst[id] = sz[v] = sz[u];
	add(v, 1);
}
 
int main() {
	ios::sync_with_stdio(false); cin.tie(nullptr);
 
	cin >> n >> m >> q;
	for (int i = 1; i < n; ++i) {
		int u, v; cin >> u >> v;
		edges[i] = {u, v};
		g[u].push_back(v);
		g[v].push_back(u);
	}
	dfs(1);
	for (int i = 1; i <= n; ++i) {
		sz[i] = 1;
		add(i, 1);
	}
	for (int id = 1; id <= m; ++id) {
		if (pr[0][edges[id][0]] == edges[id][1]) {
			swap(edges[id][0], edges[id][1]);
		}
	}
	for (int i = 1; i <= m; ++i) {
		int id; cin >> id;
		vs[id] ^= 1;
		if (vs[id]) {
			mrg(edges[id][0], edges[id][1], id);
		} else {
			cut(edges[id][0], edges[id][1], id);
		}
	}
	while (q--) {
		int u; cin >> u;
		cout << sz[get(u)] << "\n";
	}
	return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2908 KB Output is correct
2 Correct 1 ms 2908 KB Output is correct
3 Incorrect 1 ms 2908 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 65 ms 20696 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 2904 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 193 ms 24916 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 2908 KB Output isn't correct
2 Halted 0 ms 0 KB -