POJ 3107 Godfather
2013-09-13 15:09
344 查看
题意:一个N个节点构成的树,问删掉哪些节点使得剩下的子树的最大节点数最小。如果有多个这样的点,按升序输出。此题同POJ 2378 Tree Cutting
分析:简单的树形DP。设mx[u]为删掉点u后剩下的子树中最多的节点数目。则mx[u]=Max(n-sum[u],mx[v]),其中v为点u的儿子节点。(此题用vector会超时= =)
Code:
分析:简单的树形DP。设mx[u]为删掉点u后剩下的子树中最多的节点数目。则mx[u]=Max(n-sum[u],mx[v]),其中v为点u的儿子节点。(此题用vector会超时= =)
Code:
#include <algorithm> #include <iostream> #include <cstring> #include <cstdio> #include <vector> #include <queue> #include <map> #define Max(a,b) ((a)>(b)?(a):(b)) #define Min(a,b) ((a)<(b)?(a):(b)) using namespace std; const int maxn=50005; int head[maxn],sum[maxn],mx[maxn],ans[maxn]; struct node { int v,next; }edge[maxn*2]; int n,cnt,mi,tot; void add_edge(int u,int v) { edge[cnt].v=v; edge[cnt].next=head[u]; head[u]=cnt++; } void dfs(int u,int fa) { if((edge[head[u]].v==fa && edge[head[u]].next==-1)) {//首先判断该节点是否是叶子节点 mx[u]=n-1; sum[u]=1; if(mx[u]<mi) { mi=mx[u]; tot=0; ans[tot++]=u; } else if(mx[u]==mi) ans[tot++]=u; return ; } mx[u]=0; sum[u]=1; for(int i=head[u];i!=-1;i=edge[i].next) { int v=edge[i].v; if(edge[i].v==fa) continue; dfs(v,u); sum[u]+=sum[v]; mx[u]=Max(mx[u],sum[v]); } int tmp=Max(n-sum[u],mx[u]); if(tmp<mi) { mi=tmp; tot=0; ans[tot++]=u; } else if(tmp==mi) ans[tot++]=u; } int main() { while(scanf("%d",&n)==1) { int u,v; memset(head,-1,sizeof(head)); cnt=0; for(int i=1;i<n;i++) { scanf("%d %d",&u,&v); add_edge(u,v); add_edge(v,u); } mi=n; tot=0; dfs(1,-1); sort(ans,ans+tot); printf("%d",ans[0]); for(int i=1;i<tot;i++) printf(" %d",ans[i]); puts(""); } return 0; }
相关文章推荐
- 【dp每一天】POJ - 3107 Godfather (树形dp)
- [题解] POJ 3107 Godfather(树型DP 求树的直径)
- poj 3107 Godfather(树形dp)
- POJ 3107 Godfather 笔记
- (POJ 3107 Godfather)树型DP + 删点
- POJ 1655 Balancing Act&&POJ 3107 Godfather(树的重心)
- POJ 3107 Godfather(树形dp)
- poj 3107 Godfather(树的重心)
- Godfather - POJ 3107 树形dp
- [POJ] 3107 Godfather
- POJ 3107 - Godfather 树形DP..vector慎用...
- POJ 3107 Godfather 求重心
- poj 3107 Godfather (树形dp)
- POJ 3107-Godfather(树形dp)
- POJ-3107 Godfather
- poj 3107 Godfather(树形DP,点的个数较多, 删点使得剩余部分结点最多的最小值)
- POJ 3107 Godfather (求树的重心)
- POJ 3107 Godfather
- poj 3107 Godfather
- poj 3107 Godfather