#include <bits/stdc++.h>
using namespace std;
using ll = long long; using pii = pair<ll,ll>;
int main() {
ll N,K; cin >> N >> K;
vector<ll> adj[N];
ll radj[N];
vector<ll> fadj[N];
for (ll i=0;i<(N-1);i++) {
ll a,b; cin >> a >> b; a--; b--;
adj[a].push_back(b);
adj[b].push_back(a);
}
radj[0]=-1;
queue<ll> q0;
q0.push(0);
while (!q0.empty()) {
ll x0 = q0.front(); q0.pop();
for (ll y0: adj[x0]) {
if (radj[x0]!=y0) {
radj[y0]=x0;
fadj[x0].push_back(y0);
q0.push(y0);
}
}
}
ll C[N];
for (ll i=0;i<N;i++) {
cin >> C[i]; C[i]--;
assert(C[i]<K);
}
ll ans = 1e18;
for (ll B=0;B<((1LL<<K));B++) {
bool isa[K];
for (ll i=0;i<K;i++) {
isa[i]=(B>>i)%2;
}
ll nstr = 0;
for (ll i=0;i<N;i++) {
if (isa[C[i]]) {
if (i==0 || !isa[C[radj[i]]]) {
nstr++;
}
}
}
if (nstr==1) {
ans = min(ans,(ll)__builtin_popcount(B));
}
}
cout << ans-1 << "\n";
}
# | 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... |