poj 1655 Balancing Act (树形dp)
来源:互联网 发布:软件远程升级方案 编辑:程序博客网 时间:2024/05/21 14:53
对于每个节点,它的balance要么来自于父亲节点,要么来自于儿子节点。
定义dp[u]为节点u的balance,sum[u]为以u为根的子树的节点个数,n为总共的节点个数。
如果来自于父亲节点,则dp[u]=n-sum[u];
如果来自于儿子节点,则dp[u]=sum[v];
#include<cstdio>#include<cstring>#include<algorithm>#include<cstdlib>#include<vector>#define N 20005using namespace std;vector<int>edge[N];int sum[N],dp[N],n;void dfs(int u,int fa){ int i,len=edge[u].size(),v; sum[u]=1; dp[u]=0; for(i=0;i<len;i++){ v=edge[u][i]; if(v==fa) continue; dfs(v,u); dp[u]=max(dp[u],sum[v]); sum[u]+=sum[v]; } dp[u]=max(dp[u],n-sum[u]);}int main(){ int t; scanf("%d",&t); while(t--){ int i; scanf("%d",&n); for(i=0;i<=n;i++) edge[i].clear(); for(i=1;i<n;i++){ int a,b; scanf("%d%d",&a,&b); edge[a].push_back(b); edge[b].push_back(a); } dfs(1,0); int ans=99999999,si; for(i=1;i<=n;i++){ if(dp[i]<ans){ ans=dp[i]; si=i; } } printf("%d %d\n",si,ans); } return 0;}
0 0
- POJ 1655 Balancing Act 树形dp
- POJ--1655--Balancing Act--简单树形DP
- POJ 1655 - Balancing Act 树形DP
- poj 1655 Balancing Act(树形dp)
- 简单树形dp-poj-1655-Balancing Act
- poj 1655 Balancing Act(树形DP)
- (简单) 树形dp POJ 1655 Balancing Act
- Balancing Act - POJ 1655 树形dp
- poj 1655 Balancing Act (树形dp)
- POJ 1655 - Balancing Act(树形DP)
- POJ 1655Balancing Act(树形DP)
- poj 1655 Balancing Act(树形DP)
- POJ 1655 Balancing Act 树形dp
- poj 1655 Balancing Act(树形dp)
- Balancing Act+POJ+树形dp
- POJ 1655 Balancing Act 树形DP入门题
- poj 1655 Balancing Act(树形DP,删点)
- POJ 1655 Balancing Act(求树的重心--树形DP)
- Linux挂载网络文件系统小细节
- ubuntu 语系设定
- pat_1007
- prime 算法 hdu 1875
- 23种设计模式全解析
- poj 1655 Balancing Act (树形dp)
- 阿里腾讯实习生题目
- linux /etc目录说明
- Algorithm--归并排序
- cuda双调排序
- 声明和定义概念
- 运算符分类
- OpenNMS监控PC
- hdoj 2077 汉诺塔IV