结论 不同颜色数不会超过 (O(log n))
然后就是很简单的树形dp了
顺便复习一下树形dp怎么写
#include <bits/stdc++.h>
using namespace std;
int f[10005][20];
vector<int> g[10005];
int n,t1,t2,vis[10005];
void dfs(int p) {
vis[p]=1;
for(int i=0;i<g[p].size();i++) {
int q=g[p][i];
if(vis[q]==0) {
dfs(q);
for(int j=1;j<=15;j++) {
int t=1e+9;
for(int k=1;k<=15;k++) if(j!=k) {
t=min(t,f[q][k]);
}
f[p][j]+=t;
}
}
}
for(int i=1;i<=15;i++) f[p][i]+=i;
}
int main() {
cin>>n;
for(int i=1;i<n;i++) {
cin>>t1>>t2;
g[t1].push_back(t2);
g[t2].push_back(t1);
}
dfs(1);
int ans = 1e+9;
for(int i=1;i<=15;i++) ans=min(f[1][i],ans);
cout<<ans<<endl;
}