# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
471415 |
2021-09-09T04:44:20 Z |
shrimb |
Mergers (JOI19_mergers) |
C++17 |
|
163 ms |
34276 KB |
#include"bits/stdc++.h"
#define int long long
#define endl '\n'
#define USACO(x) ifstream cin ((string)#x + ".in"); ofstream cout((string)#x + ".out")
using namespace std;
int n, k;
vector<int> adj[500001];
int s[500001];
int tot[500001];
int subtree[500001];
map<int,int>* s2b[500001];
int cnt[5000001];
bool bad[5000001];
void inc (int a, int b, int v) {
(*s2b[a])[b] += v;
if ((*s2b[a])[b] == tot[b]) cnt[a]++;
}
int ans = INT_MAX;
void dfs (int cur, int par) {
// cerr << cur << " " << par << endl;
subtree[cur] = 1;
if (adj[cur].size() == 1 and cur != 1) {
s2b[cur] = new map<int,int>();
inc(cur, s[cur], 1);
ans = min(ans, (int)abs(cnt[cur] - (int)((*s2b[cur]).size())));
bad[cur] = (cnt[cur] == (int)((*s2b[cur]).size()));
return;
}
int best = -1;
for (int i : adj[cur]) {
if (i != par) {
dfs(i, cur);
subtree[cur] += subtree[i];
if (best == -1 or subtree[i] > subtree[best]) best = i;
}
}
s2b[cur] = s2b[best];
cnt[cur] = cnt[best];
for (int i : adj[cur]) {
if (i != par and i != best) {
for (auto j : (*s2b[i])) {
inc(cur, j.first, j.second);
}
delete s2b[i];
}
}
inc(cur, s[cur], 1);
ans = min(ans, (int)abs(cnt[cur] - (int)((*s2b[cur]).size())));
bad[cur] = (cnt[cur] == (int)((*s2b[cur]).size()));
}
int calc_ans (int cur, int par) {
if (cur != 1 and bad[cur] == 1) return 1;
int ret = 0;
for (int i : adj[cur]) {
if (i != par) {
ret += calc_ans(i, cur);
}
}
return ret;
}
signed main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> n >> k;
for (int i = 1 ; i < n ; i++) {
int a, b;
cin >> a >> b;
adj[a].push_back(b);
adj[b].push_back(a);
}
for (int i = 1 ; i <= n ; i++) {
cin >> s[i];
tot[s[i]]++;
}
dfs(1, 0);
cout << max(calc_ans(1, 0) - 1, 0ll);
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
8 ms |
11980 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
8 ms |
11980 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
8 ms |
11980 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
91 ms |
32404 KB |
Output is correct |
2 |
Incorrect |
163 ms |
34276 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
8 ms |
11980 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |