poj 2378 Tree Cutting
来源:互联网 发布:silver是什么软件 编辑:程序博客网 时间:2024/06/08 04:48
邻接表建树,然后DFS求节点的孩子数。枚举被去掉的节点,去掉之后树变成了父节点和各个孩子组成的块,查询各个块的节点数即可
import java.util.*;import java.io.*; class edge{ int from,to,next; public edge(int a, int b, int c){ from=a;to=b;next=c; }}class problem{ int n; edge arr[]; int header[]; int sons[]; int level[]; int edge_num = 0; void solver() throws IOException{ BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(reader.readLine()); n = Integer.parseInt(st.nextToken()); arr = new edge[2*n+1]; sons = new int[n+1]; level = new int[n+1]; header = new int[n+1]; Arrays.fill(sons, -1); Arrays.fill(header, -1); for(int i=2;i<=n;i++){ st = new StringTokenizer(reader.readLine()); int t1 = Integer.parseInt(st.nextToken()); int t2 = Integer.parseInt(st.nextToken()); arr[edge_num] = new edge(t1,t2,header[t1]); header[t1] = edge_num++; arr[edge_num] = new edge(t2,t1,header[t2]); header[t2] = edge_num++; } for(int i=1;i<=n;i++){ if(sons[i]==-1) dfs(i,1); } for(int i=1;i<=n;i++){ int t1 = sons[1]-sons[i]; if(t1>n/2) continue; boolean flag = true; for(int j=header[i];j!=-1;j=arr[j].next){ int to = arr[j].to; if((level[to]>level[i])&&(sons[to]+1)>n/2) flag = false; } if(flag) System.out.println(i); } } int dfs(int pos, int l){ int sum=0; level[pos] = l; for(int i=header[pos];i!=-1;i=arr[i].next){ if(level[arr[i].to]==0){ sum+=dfs(arr[i].to,l+1)+1; } } sons[pos]=sum; return sum; }}public class fence8 { public static void main (String [] args) throws Exception { problem p = new problem(); p.solver(); }}
0 0
- poj 2378 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
- [POJ 2378] Tree Cutting
- POJ-2378-Tree cutting
- POJ 2378 Tree Cutting 1655 Blancing Act
- POJ--2378--Tree Cutting--树形DP
- poj 2378 Tree Cutting(树形dp)
- (简单) 树形dp POJ 2378 Tree Cutting
- poj 2378 Tree Cutting (树形dp)
- poj 2378 Tree Cutting 树形dp
- Tree Cutting - POJ 2378 树形dp
- POJ 2378 Tree Cutting 子树统计
- POJ 2378 Tree Cutting(树形DP)
- 安卓常用开发者社区和网址
- 驱动程序开发--AT91SAM9260的GPIO驱动笔记
- readonly VS const C#
- MPP数据库
- LINUX6.1(64bit) EBS12.1.3 安装相关错误
- poj 2378 Tree Cutting
- 这个只是测试
- 0-1背包问题
- C#中判断socket是否已断开的方法
- LeetCode之二叉树的遍历(二)
- utf8、utf-8、UTF8、UTF-8那个是正确的?
- 7.2 通信系统中为什么要进行调制和解调?调制的分类方法有哪些?
- C#图标入任务栏,右键程序
- 第一天.程序员的七宗罪