传送门

解题思路

  直接按奇偶层染色是错的,\(WA\)了好几次,所以要树形\(dp\),感觉最多\(log\)种颜色,不太会证。

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm> using namespace std;
const int N=10005; inline int rd(){
int x=0,f=1; char ch=getchar();
while(!isdigit(ch)) f=ch=='-'?0:1,ch=getchar();
while(isdigit(ch)) x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
return f?x:-x;
} int n,head[N],cnt,to[N<<1],nxt[N<<1];
int f[N][30],ans=1e9; inline void add(int bg,int ed){
to[++cnt]=ed,nxt[cnt]=head[bg],head[bg]=cnt;
} void dfs(int x,int F){
for(int i=head[x];i;i=nxt[i]){
int u=to[i]; if(u==F) continue;
dfs(u,x);
}
for(int i=1;i<=25;i++){
f[x][i]=i;
for(int j=head[x];j;j=nxt[j]){
int u=to[j],Min=1e9; if(u==F) continue;
for(int k=1;k<=25;k++)
if(k!=i) Min=min(Min,f[u][k]);
f[x][i]+=Min;
}
}
} int main(){
n=rd(); int x,y;
for(int i=1;i<n;i++){
x=rd(); y=rd();
add(x,y); add(y,x);
}
dfs(1,0);
for(int i=1;i<=25;i++) ans=min(ans,f[1][i]);
printf("%d\n",ans);
return 0;
}

最新文章

  1. TypeScript的4种编译方式
  2. 安装samba服务器
  3. iOS页面间传值的方式(NSUserDefault/Delegate/NSNotification/Block/单例)
  4. C++中map用法
  5. Oracle存储过程及函数
  6. css实现两端对齐的3种方法
  7. XML读写文件辅助类
  8. mybatis学习笔记(一)-- 简单入门(附测试Demo详细过程)
  9. [01] Java语言的基本认识
  10. linux命令进阶
  11. http跳转htts的htaccess文件设置
  12. Monkey相关参数 笔记
  13. ubuntu下的“用vim打开中文乱码,用cat打开正常显示”的解决方法
  14. java静态代码块、普通代码
  15. Redis开发 - 1. 认识redis
  16. java基础篇---网络编程(UDP程序设计)
  17. SharpGL学习笔记(八) 矩阵堆栈和变换的综合例子: 机器人
  18. 【重大更新】DevExpress v17.2新版亮点—Bootstrap篇(二)
  19. Windows下的Nginx安装与配置(PHP)
  20. Day10 MVC

热门文章

  1. 【MEAN Web开发】CentOS 7 安装MongoDB 3.2.3
  2. poj2431Expedition
  3. decision table
  4. js 为false的几种情况
  5. Python入门习题10.河内塔(汉诺塔)问题
  6. mysql双主+keepalived架构
  7. P4390 [BOI2007]Mokia 摩基亚
  8. C#设计模式:抽象工厂(Abstract Factory)
  9. 攻防世界--insanity
  10. axios 如何获取下载文件的进度条