# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
966964 | blackslex | Capital City (JOI20_capital_city) | C++17 | 3060 ms | 38024 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
using namespace std;
int n, k, x, y;
int main() {
scanf("%d %d", &n, &k);
vector<int> c(n + 5), st(k + 5);
vector<vector<int>> v(n + 5, vector<int>());
for (int i = 1; i < n; i++) scanf("%d %d", &x, &y), v[x].emplace_back(y), v[y].emplace_back(x);
for (int i = 1; i <= n; i++) scanf("%d", &c[i]), st[c[i]] = i;
vector<bool> cnt(k + 5);
function<bool(int, int, int)> dfs = [&] (int cur, int par, int col) {
bool add = (c[cur] == col);
for (auto &e: v[cur]) {
if (par == e) continue;
add |= dfs(e, cur, col);
}
if (add) cnt[c[cur]] = 1;
return add;
};
int ans = 1e9;
for (int i = 1; i <= k; i++) {
cnt.assign(n + 5, 0);
dfs(st[i], 0, i);
int cur = 0;
for (int j = 1; j <= k; j++) if (cnt[j]) cur++;
ans = min(ans, cur - 1);
}
printf("%d", ans);
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |