poj2378,Tree Cutting
来源:互联网 发布:java经典书籍分享 编辑:程序博客网 时间:2024/05/18 00:57
树形dp
最近各种水树形dp。。。
#include<stdio.h>#include<string.h>#include<stdlib.h>#include<math.h>#define INF 200000000int dp[10005],first[10005],next[20005],re[10005];struct edge{ int u; int v;}en[20005];void add(int a,int b,int p){ en[p].u=a; en[p].v=b; next[p]=first[a]; first[a]=p;}void getdp(int s,int f){ int i; for(i=first[s];i!=-1;i=next[i]) { if(en[i].v==f) continue; else { getdp(en[i].v,s); dp[s]+=dp[en[i].v]; } } dp[s]++;}int main(){ int n,i,j,k,l,a,b,flag,idx,tot; while(scanf("%d",&n)!=EOF) { memset(first,-1,sizeof(first)); memset(next,-1,sizeof(next)); memset(dp,0,sizeof(dp)); idx=0; for(i=1;i<n;i++) { scanf("%d%d",&a,&b); idx++; add(a,b,idx); idx++; add(b,a,idx); } /*for(i=1;i<=idx;i++) printf("%d %d %d\n",i,en[i].u,en[i].v);*/ getdp(1,-1); /*for(i=1;i<=n;i++) printf("%d ",dp[i]); printf("\n");*/ tot=0; for(i=1;i<=n;i++) { flag=0; for(j=first[i];j!=-1;j=next[j]) { if(dp[en[j].v]<dp[i]) if(dp[en[j].v]>n/2) { flag=1;break; } } if(n-dp[i]>n/2) flag=1; if(flag) continue; re[++tot]=i; } if(tot==0) printf("NONE\n"); else { for(i=1;i<=tot;i++) printf("%d\n",re[i]); } /*for(i=1;i<=n;i++) printf("%d ",dp[i]);*/ } return 0;}
0 0
- poj2378 Tree Cutting
- poj2378(Tree Cutting)
- POJ2378:Tree Cutting(DFS)
- poj2378(dfs) Tree Cutting
- poj2378,Tree Cutting
- POJ2378——Tree Cutting
- Tree Cutting
- 1604 Tree Cutting
- poj 2378 Tree Cutting
- POJ 2378 Tree Cutting
- POJ 2378 Tree Cutting
- poj 2378 Tree Cutting
- POJ 2378 Tree Cutting
- poj 2378 Tree Cutting
- Tree Cutting (树形DP)
- poj 2378 Tree Cutting
- [POJ 2378] Tree Cutting
- Hdu 5909 Tree Cutting
- lua语言的学习(一)
- 第二个重复出现的数
- Delphi中的 UTC 时间与DateTime及XMLDateTime
- 使用Quartus II进行CPLD仿真
- 双向循环链表经典案例,20孩子报数,7的倍数或数字中含有7,不出声,数数的方向逆转
- poj2378,Tree Cutting
- .NET---物件导向与类别设计
- wustoj1280What’ s Soapbear(简单计算几何)
- 聚类算法之MST算法 java实现版本
- php语法
- 单元测试准则
- 使用windows远程桌面连接拷贝远程电脑上文件到本地的方法
- 关于android中SQLite基本操作
- chapter 3(第二部分)