poj 2378(树形dp)
2013-10-03 21:29
441 查看
题目链接:http://poj.org/problem?id=2378
思路:num[u]表示以u为根的子树的顶点个数(包括),如果去掉u之后u的每棵子树都小于等于n/2,则选择u。
View Code
思路:num[u]表示以u为根的子树的顶点个数(包括),如果去掉u之后u的每棵子树都小于等于n/2,则选择u。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<vector> using namespace std; #define MAXN 11111 #define FILL(a,b) memset(a,b,sizeof(a)) int n,num[MAXN]; bool mark[MAXN]; vector<vector<int> >g; int dfs(int u,int father) { num[u]=1; bool flag=true; for(int i=0;i<g[u].size();i++){ int v=g[u][i]; if(v==father)continue; int tmp=dfs(v,u); if(tmp>n/2)flag=false; num[u]+=num[v]; } if(flag&&n-num[u]<=n/2)mark[u]=true; return num[u]; } int main() { int u,v; while(~scanf("%d",&n)){ g.clear(); g.resize(n+2); for(int i=1;i<n;i++){ scanf("%d%d",&u,&v); g[u].push_back(v); g[v].push_back(u); } FILL(mark,false); dfs(1,-1); for(int i=1;i<=n;i++)if(mark[i])printf("%d\n",i); } return 0; }
View Code
相关文章推荐
- poj 2378 Tree Cutting 树形dp (删点)
- Poj 2378 Tree Cutting (树形DP)
- POJ 2378 树形DP??
- poj 2378 简单树形dp
- POJ 2378 树形DP??
- 【POJ】2378 - Tree Cutting 树形dp
- POJ 2378-Tree Cutting(树形dp)
- POJ - 2378 Tree Cutting(树形dp)
- Tree Cutting - POJ 2378 树形dp
- poj 2378(树形dp)
- poj 2378 树形 dp
- poj 2378 Tree Cutting 树形DP
- POJ 2378 Tree Cutting(树形DP)
- poj 2378(树形dp)
- poj 1655 and 3107 and 2378 树形dp(树的重心问题)
- POJ 2378 Tree Cutting——树形dp
- POJ 2378 树形dp
- poj 2378 Tree Cutting (树形dp)
- Poj 2378 Tree Cutting(树形dp)
- poj 2378 Tree Cutting(树形DP,删点使得独立的部分结点数不超过n/2)