hdu 4714 (树形dp)
来源:互联网 发布:java如果输入错误跳出 编辑:程序博客网 时间:2024/06/07 00:14
题意:给一棵树,删除一条边和增加一条边代价都是1,问把所有节点连成环,最少的代价。
思路:可以将树删成ans+1条链,答案就是ans+ans+1。如果一个节点的分支数大于1的话,就把该点与父节点的边删点,该节点形成的链数就是son-1。树的根节点注意,应为根节点可以有两个分支。
#pragma comment(linker, "/STACK:1024000000,1024000000") #include<stdio.h>#include<string.h>const int N=1000100;int head[N],num,ans;struct edge{ int ed,next;}e[N*2];void addedge(int x,int y){ e[num].ed=y;e[num].next=head[x];head[x]=num++; e[num].ed=x;e[num].next=head[y];head[y]=num++;}int dfs(int u,int fa){ int i,v,son=0; for(i=head[u];i!=-1;i=e[i].next) { v=e[i].ed; if(v==fa)continue; son+=dfs(v,u); } if(son>=2)//将该节点与父节点的边删去 { ans+=son-1;//删去后新加了son-1条链 if(u==1)ans--;//根节点可以有两个分支 return 0; } else return 1;}int main(){ int i,x,y,n,t; scanf("%d",&t); while(t--) { memset(head,-1,sizeof(head)); num=0; scanf("%d",&n); for(i=1;i<n;i++) { scanf("%d%d",&x,&y); addedge(x,y); } ans=0; dfs(1,0); printf("%d\n",ans*2+1); } return 0;}
- hdu 4714 (树形dp)
- hdu 4714 (树形dp)
- hdu 4714(树形dp)
- HDU-4714-树形dp
- 树形dp-hdu-4714-Tree2cycle
- hdu 4714 Tree2cycle (树形dp)
- HDU 4714 Tree2cycle(树形dp)
- HDU 4714 Tree2cycle (构造,树形DP)
- 树形dp hdu Computer
- 【树形DP】hdu 1520
- hdu 1054 #树形DP
- hdu 4303 树形dp
- hdu 4340 树形dp
- hdu 4340 树形DP
- HDU 4340 树形DP
- hdu 4267 树形dp
- hdu 4383 树形dp
- HDU 2196 树形dp
- Robotium学习笔记一
- VC 6.0下载|VC 6.0中文版下载|VC 6.0英文版下载【支持Win7和XP】
- 今天好累的
- 关于出现僵尸信号SIGBAT或者EXC_BAD_ACCESS的解决方案
- [每日一题] 11gOCP 1z0-053 :2013-10-9 backup with the KEEP option....................................33
- hdu 4714 (树形dp)
- uiscrollview去除滑动效果
- 求两个链表的第一个节点
- Base64加密
- chromium aura简介
- mysql foreign key
- 打个招呼
- 第七周 计算圆柱体表面积的程序
- Windows消息机制要点