Submission #376886

# Submission time Handle Problem Language Result Execution time Memory
376886 2021-03-12T06:07:06 Z casperwang Mergers (JOI19_mergers) C++14
10 / 100
3000 ms 30116 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) {
	for (int i = 1; i <= N; i++)
		k[i] = 0, dis[i] = 0;
	k[st] = st;
	queue <int> nxt;
	nxt.push(st);
	while (nxt.size()) {
		int now = nxt.front();
		nxt.pop();
		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 = 1; i <= N; i++) {
		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];
		}
	}
	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;
}
# Verdict Execution time Memory Grader output
1 Correct 16 ms 23916 KB Output is correct
2 Correct 19 ms 23916 KB Output is correct
3 Correct 17 ms 23916 KB Output is correct
4 Correct 17 ms 23916 KB Output is correct
5 Correct 17 ms 23916 KB Output is correct
6 Correct 17 ms 23916 KB Output is correct
7 Correct 16 ms 23916 KB Output is correct
8 Correct 16 ms 23916 KB Output is correct
9 Correct 17 ms 24044 KB Output is correct
10 Correct 18 ms 24044 KB Output is correct
11 Correct 19 ms 23916 KB Output is correct
12 Correct 17 ms 23916 KB Output is correct
13 Correct 17 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 17 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 18 ms 23916 KB Output is correct
20 Correct 17 ms 23916 KB Output is correct
21 Correct 16 ms 23916 KB Output is correct
22 Correct 17 ms 23916 KB Output is correct
23 Correct 16 ms 23916 KB Output is correct
24 Correct 17 ms 23916 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 16 ms 23916 KB Output is correct
2 Correct 19 ms 23916 KB Output is correct
3 Correct 17 ms 23916 KB Output is correct
4 Correct 17 ms 23916 KB Output is correct
5 Correct 17 ms 23916 KB Output is correct
6 Correct 17 ms 23916 KB Output is correct
7 Correct 16 ms 23916 KB Output is correct
8 Correct 16 ms 23916 KB Output is correct
9 Correct 17 ms 24044 KB Output is correct
10 Correct 18 ms 24044 KB Output is correct
11 Correct 19 ms 23916 KB Output is correct
12 Correct 17 ms 23916 KB Output is correct
13 Correct 17 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 17 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 18 ms 23916 KB Output is correct
20 Correct 17 ms 23916 KB Output is correct
21 Correct 16 ms 23916 KB Output is correct
22 Correct 17 ms 23916 KB Output is correct
23 Correct 16 ms 23916 KB Output is correct
24 Correct 17 ms 23916 KB Output is correct
25 Correct 19 ms 23916 KB Output is correct
26 Correct 162 ms 24160 KB Output is correct
27 Correct 22 ms 24044 KB Output is correct
28 Incorrect 64 ms 24172 KB Output isn't correct
29 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 16 ms 23916 KB Output is correct
2 Correct 19 ms 23916 KB Output is correct
3 Correct 17 ms 23916 KB Output is correct
4 Correct 17 ms 23916 KB Output is correct
5 Correct 17 ms 23916 KB Output is correct
6 Correct 17 ms 23916 KB Output is correct
7 Correct 16 ms 23916 KB Output is correct
8 Correct 16 ms 23916 KB Output is correct
9 Correct 17 ms 24044 KB Output is correct
10 Correct 18 ms 24044 KB Output is correct
11 Correct 19 ms 23916 KB Output is correct
12 Correct 17 ms 23916 KB Output is correct
13 Correct 17 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 17 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 18 ms 23916 KB Output is correct
20 Correct 17 ms 23916 KB Output is correct
21 Correct 16 ms 23916 KB Output is correct
22 Correct 17 ms 23916 KB Output is correct
23 Correct 16 ms 23916 KB Output is correct
24 Correct 17 ms 23916 KB Output is correct
25 Correct 18 ms 23916 KB Output is correct
26 Correct 211 ms 29812 KB Output is correct
27 Correct 670 ms 29164 KB Output is correct
28 Correct 20 ms 24044 KB Output is correct
29 Correct 17 ms 23916 KB Output is correct
30 Correct 17 ms 23916 KB Output is correct
31 Correct 482 ms 29164 KB Output is correct
32 Correct 20 ms 24044 KB Output is correct
33 Correct 105 ms 28908 KB Output is correct
34 Correct 571 ms 29036 KB Output is correct
35 Correct 22 ms 24044 KB Output is correct
36 Incorrect 102 ms 28908 KB Output isn't correct
37 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 203 ms 29924 KB Output is correct
2 Execution timed out 3082 ms 30116 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 16 ms 23916 KB Output is correct
2 Correct 19 ms 23916 KB Output is correct
3 Correct 17 ms 23916 KB Output is correct
4 Correct 17 ms 23916 KB Output is correct
5 Correct 17 ms 23916 KB Output is correct
6 Correct 17 ms 23916 KB Output is correct
7 Correct 16 ms 23916 KB Output is correct
8 Correct 16 ms 23916 KB Output is correct
9 Correct 17 ms 24044 KB Output is correct
10 Correct 18 ms 24044 KB Output is correct
11 Correct 19 ms 23916 KB Output is correct
12 Correct 17 ms 23916 KB Output is correct
13 Correct 17 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 17 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 18 ms 23916 KB Output is correct
20 Correct 17 ms 23916 KB Output is correct
21 Correct 16 ms 23916 KB Output is correct
22 Correct 17 ms 23916 KB Output is correct
23 Correct 16 ms 23916 KB Output is correct
24 Correct 17 ms 23916 KB Output is correct
25 Correct 19 ms 23916 KB Output is correct
26 Correct 162 ms 24160 KB Output is correct
27 Correct 22 ms 24044 KB Output is correct
28 Incorrect 64 ms 24172 KB Output isn't correct
29 Halted 0 ms 0 KB -