답안 #376887

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
376887 2021-03-12T06:08:37 Z casperwang Mergers (JOI19_mergers) C++14
10 / 100
3000 ms 32128 KB
#include <bits/stdc++.h>
#define pb emplace_back
using namespace std;
#define debug(args...) kout("[ " + string(#args) + " ]", args)
void kout() { cerr << endl; }
template <class T, class ...U> void kout(T a, U ...b) { cerr << a << ' ',kout(b...); }
template <class T> void pary(T L, T R) { while (L != R) cerr << *L << " \n"[++L==R]; }

const int MAXN = 500000;
int N, K;
int a, b;
vector <int> path[MAXN+1];
vector <int> G[MAXN+1];
int v[MAXN+1];
int dsu[MAXN+1];
int sze[MAXN+1];
bool vis[MAXN+1];
int k[MAXN+1];
int dis[MAXN+1];
int ans = 0;

int fnd(int a) {
	return dsu[a] == a ? a : dsu[a] = fnd(dsu[a]);
}

void Merge(int a, int b) {
	a = fnd(a), b = fnd(b);
	if (a == b) return;
	if (sze[a] > sze[b]) {
		dsu[b] = a;
		sze[a] += sze[b];
	} else {
		dsu[a] = b;
		sze[b] += sze[a];
	}
}

void BFS(int st) {
	k[st] = st;
	queue <int> nxt;
	nxt.push(st);
	vector <int> tmp;
	while (nxt.size()) {
		int now = nxt.front();
		nxt.pop();
		tmp.pb(now);
		if (dis[now] >= 100) continue;
		for (int i : path[now]) {
			if (i == k[now]) continue;
			k[i] = now;
			dis[i] = dis[now] + 1;
			nxt.push(i);
		}
	}
	for (int i : tmp) {
		if (v[i] != v[st]) continue;
		int t = i;
		while (k[t] != t) {
			if (fnd(t) == fnd(st)) break;
			Merge(t, k[t]);
			t = k[t];
		}
	}
	for (int i : tmp) {
		k[i] = dis[i] = 0;
	}
	return;
}

signed main() {
	ios_base::sync_with_stdio(0), cin.tie(0);
	cin >> N >> K;
	for (int i = 1; i < N; i++) {
		cin >> a >> b;
		path[a].pb(b);
		path[b].pb(a);
	}
	for (int i = 1; i <= N; i++) {
		cin >> v[i];
		dsu[i] = i;
		sze[i] = 1;
	}
	for (int i = 1; i <= N; i++) {
		if (vis[v[i]]) continue;
		BFS(i);
		vis[v[i]] = true;
	}
	for (int i = 1; i <= N; i++) {
		for (int j : path[i]) {
			if (fnd(i) == fnd(j)) continue;
			G[fnd(i)].pb(fnd(j));
		}
	}
	for (int i = 1; i <= N; i++) {
		if (fnd(i) != i || !G[i].size()) continue;
		bool flag = true;
		for (int j : G[i])
			flag &= (j == G[i][0]);
		if (flag) ans++;
	}
	cout << (ans+1)/2 << '\n';
	return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 17 ms 23916 KB Output is correct
2 Correct 17 ms 23916 KB Output is correct
3 Correct 16 ms 23916 KB Output is correct
4 Correct 18 ms 23916 KB Output is correct
5 Correct 19 ms 23916 KB Output is correct
6 Correct 17 ms 23916 KB Output is correct
7 Correct 17 ms 23916 KB Output is correct
8 Correct 16 ms 23916 KB Output is correct
9 Correct 17 ms 23916 KB Output is correct
10 Correct 17 ms 23916 KB Output is correct
11 Correct 17 ms 23916 KB Output is correct
12 Correct 16 ms 23916 KB Output is correct
13 Correct 18 ms 23916 KB Output is correct
14 Correct 17 ms 23916 KB Output is correct
15 Correct 17 ms 23916 KB Output is correct
16 Correct 16 ms 23916 KB Output is correct
17 Correct 17 ms 23916 KB Output is correct
18 Correct 17 ms 23916 KB Output is correct
19 Correct 17 ms 23916 KB Output is correct
20 Correct 19 ms 23916 KB Output is correct
21 Correct 17 ms 23916 KB Output is correct
22 Correct 19 ms 23916 KB Output is correct
23 Correct 17 ms 23916 KB Output is correct
24 Correct 18 ms 23916 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 17 ms 23916 KB Output is correct
2 Correct 17 ms 23916 KB Output is correct
3 Correct 16 ms 23916 KB Output is correct
4 Correct 18 ms 23916 KB Output is correct
5 Correct 19 ms 23916 KB Output is correct
6 Correct 17 ms 23916 KB Output is correct
7 Correct 17 ms 23916 KB Output is correct
8 Correct 16 ms 23916 KB Output is correct
9 Correct 17 ms 23916 KB Output is correct
10 Correct 17 ms 23916 KB Output is correct
11 Correct 17 ms 23916 KB Output is correct
12 Correct 16 ms 23916 KB Output is correct
13 Correct 18 ms 23916 KB Output is correct
14 Correct 17 ms 23916 KB Output is correct
15 Correct 17 ms 23916 KB Output is correct
16 Correct 16 ms 23916 KB Output is correct
17 Correct 17 ms 23916 KB Output is correct
18 Correct 17 ms 23916 KB Output is correct
19 Correct 17 ms 23916 KB Output is correct
20 Correct 19 ms 23916 KB Output is correct
21 Correct 17 ms 23916 KB Output is correct
22 Correct 19 ms 23916 KB Output is correct
23 Correct 17 ms 23916 KB Output is correct
24 Correct 18 ms 23916 KB Output is correct
25 Correct 17 ms 23916 KB Output is correct
26 Correct 213 ms 24172 KB Output is correct
27 Correct 22 ms 24044 KB Output is correct
28 Incorrect 53 ms 24172 KB Output isn't correct
29 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 17 ms 23916 KB Output is correct
2 Correct 17 ms 23916 KB Output is correct
3 Correct 16 ms 23916 KB Output is correct
4 Correct 18 ms 23916 KB Output is correct
5 Correct 19 ms 23916 KB Output is correct
6 Correct 17 ms 23916 KB Output is correct
7 Correct 17 ms 23916 KB Output is correct
8 Correct 16 ms 23916 KB Output is correct
9 Correct 17 ms 23916 KB Output is correct
10 Correct 17 ms 23916 KB Output is correct
11 Correct 17 ms 23916 KB Output is correct
12 Correct 16 ms 23916 KB Output is correct
13 Correct 18 ms 23916 KB Output is correct
14 Correct 17 ms 23916 KB Output is correct
15 Correct 17 ms 23916 KB Output is correct
16 Correct 16 ms 23916 KB Output is correct
17 Correct 17 ms 23916 KB Output is correct
18 Correct 17 ms 23916 KB Output is correct
19 Correct 17 ms 23916 KB Output is correct
20 Correct 19 ms 23916 KB Output is correct
21 Correct 17 ms 23916 KB Output is correct
22 Correct 19 ms 23916 KB Output is correct
23 Correct 17 ms 23916 KB Output is correct
24 Correct 18 ms 23916 KB Output is correct
25 Correct 17 ms 23916 KB Output is correct
26 Correct 304 ms 30896 KB Output is correct
27 Correct 823 ms 30268 KB Output is correct
28 Correct 21 ms 24044 KB Output is correct
29 Correct 20 ms 23916 KB Output is correct
30 Correct 17 ms 23916 KB Output is correct
31 Correct 598 ms 30276 KB Output is correct
32 Correct 21 ms 24044 KB Output is correct
33 Incorrect 114 ms 32128 KB Output isn't correct
34 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 302 ms 30728 KB Output is correct
2 Execution timed out 3017 ms 31160 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 17 ms 23916 KB Output is correct
2 Correct 17 ms 23916 KB Output is correct
3 Correct 16 ms 23916 KB Output is correct
4 Correct 18 ms 23916 KB Output is correct
5 Correct 19 ms 23916 KB Output is correct
6 Correct 17 ms 23916 KB Output is correct
7 Correct 17 ms 23916 KB Output is correct
8 Correct 16 ms 23916 KB Output is correct
9 Correct 17 ms 23916 KB Output is correct
10 Correct 17 ms 23916 KB Output is correct
11 Correct 17 ms 23916 KB Output is correct
12 Correct 16 ms 23916 KB Output is correct
13 Correct 18 ms 23916 KB Output is correct
14 Correct 17 ms 23916 KB Output is correct
15 Correct 17 ms 23916 KB Output is correct
16 Correct 16 ms 23916 KB Output is correct
17 Correct 17 ms 23916 KB Output is correct
18 Correct 17 ms 23916 KB Output is correct
19 Correct 17 ms 23916 KB Output is correct
20 Correct 19 ms 23916 KB Output is correct
21 Correct 17 ms 23916 KB Output is correct
22 Correct 19 ms 23916 KB Output is correct
23 Correct 17 ms 23916 KB Output is correct
24 Correct 18 ms 23916 KB Output is correct
25 Correct 17 ms 23916 KB Output is correct
26 Correct 213 ms 24172 KB Output is correct
27 Correct 22 ms 24044 KB Output is correct
28 Incorrect 53 ms 24172 KB Output isn't correct
29 Halted 0 ms 0 KB -