// File AA.cpp created on 13.08.2025 at 00:09:57
#include <bits/stdc++.h>
using i64 = long long;
#ifdef DEBUG
#include "/home/ahmetalp/Desktop/Workplace/debug.h"
#else
#define debug(...) void(23)
#endif
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int N, K;
std::cin >> N >> K;
std::vector<std::vector<int>> adj(N);
for (int i = 1; i < N; ++i) {
int A, B;
std::cin >> A >> B;
--A, --B;
adj[A].emplace_back(B);
adj[B].emplace_back(A);
}
std::vector<int> C(N);
for (int i = 0; i < N; ++i) {
std::cin >> C[i];
--C[i];
}
std::vector<std::vector<int>> bdj(K);
for (int c = 0; c < K; ++c) {
int p = 0;
while (C[p] != c) {
p++;
}
auto dfs = [&](auto&& self, int v, int pr) -> bool {
bool good = false;
for (auto u : adj[v]) {
if (u == pr) {
continue;
}
good |= self(self, u, v);
}
if (C[v] == c) {
good = true;
}
if (good && C[v] != c) {
bdj[c].emplace_back(C[v]);
}
return good;
};
dfs(dfs, p, -1);
}
debug(bdj);
int n = 0, tim = 0;
std::vector<int> tin(K, -1), low(K, -1), bel(K, -1), siz, stk;
auto dfs = [&](auto&& self, int v) -> void {
tin[v] = low[v] = tim++;
stk.emplace_back(v);
for (auto u : bdj[v]) {
if (tin[u] == -1) {
self(self, u);
low[v] = std::min(low[v], low[u]);
} else if (bel[u] == -1) {
low[v] = std::min(low[v], tin[u]);
}
}
if (tin[v] == low[v]) {
int u;
siz.emplace_back(0);
do {
u = stk.back();
stk.pop_back();
bel[u] = n;
siz[n]++;
} while (u != v);
n++;
}
};
for (int i = 0; i < K; ++i) {
if (tin[i] == -1) {
dfs(dfs, i);
}
}
debug(bel, siz);
std::vector<int> bad(n);
for (int v = 0; v < K; ++v) {
for (auto u : bdj[v]) {
if (bel[u] != bel[v]) {
bad[bel[v]] = true;
break;
}
}
}
int ans = K + 1;
for (int i = 0; i < n; ++i) {
if (!bad[i]) {
ans = std::min(ans, siz[i]);
}
}
std::cout << ans - 1 << '\n';
return 0;
}
# | 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... |