树形dp
首先,我们可以考虑dp,把这个问题看成一个树的染色问题,用dp[i][j]表示以i为根节点,将树染成第i种颜色的最小代价,那么我们可以得到j的最大值是(log(maxn)/log(2)+1)=15,所以循环次数我们开到15就可以了,然后是常规初始化和dp,这里dfs是遍历整棵树寻找答案.
for(int i = 1; i <= 15; i++) for(int j = 1; j<= 15; j++) if(i != j) mn = min(mn,dp[v][j]) dp[u][i] += mn
原文:https://www.cnblogs.com/caterpillor/p/12917171.html