3391: [Usaco2004 Dec]Tree Cutting网络破坏
时间:2022-05-08
本文章向大家介绍3391: [Usaco2004 Dec]Tree Cutting网络破坏,主要内容包括3391: [Usaco2004 Dec]Tree Cutting网络破坏、Description、Input、Output、Sample Input、Sample Output、HINT、Source、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
3391: [Usaco2004 Dec]Tree Cutting网络破坏
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 76 Solved: 59
Description
约翰意识到贝茜建设网络花费了他巨额的经费,就把她解雇了.贝茜很愤怒,打算狠狠报
复.她打算破坏刚建成的约翰的网络. 约翰的网络是树形的,连接着N(1≤N≤10000)个牛棚.她打算切断某一个牛棚的电源,使和这个牛棚相连的所有电缆全部中断.之后,就会存在若干子网络.为保证破坏够大,每一个子网的牛棚数不得超过总牛棚数的一半,那哪些牛棚值得破坏呢?
Input
第1行:一个整数N.
第2到N+1行:每行输入两个整数,表示一条电缆的两个端点.
Output
按从小到大的顺序,输出所有值得破坏的牛棚.如果没有一个值得破坏,就输出“NONE”.
Sample Input
10 1 2 2 3 3 4 4 5 6 7 7 8 8 9 9 10 3 8
Sample Output
3 8 如果牛棚3或牛棚8被破坏,剩下的三个子网节点数将是5,2,2,没有超过5的. 来源信息
HINT
Source
题解:一道树的水题,关键在于如何快速求出各点周围的子树大小,其实只需要DFS预处理出以某点(比如点1)为根的树各个子树的大小,然后对于某一点而言,各子树大小即为在有根树的状况下它的各个子树大小,还有另一个子树大小就是n-size[x](size[x]标是有根树的情形下以x为根的子树的大小),然后简单判断即可,复杂度O(N)
1 /**************************************************************
2 Problem: 3391
3 User: HansBug
4 Language: Pascal
5 Result: Accepted
6 Time:16 ms
7 Memory:1716 kb
8 ****************************************************************/
9
10 type
11 point=^node;
12 node=record
13 g:longint;
14 next:point;
15 end;
16 var
17 i,j,k,l,m,n:longint;
18 a:array[0..100000] of point;
19 b:array[0..100000] of longint;
20 c:array[0..100000] of longint;
21 procedure add(x,y:longint);
22 var p:point;
23 begin
24 new(p);p^.g:=y;;
25 p^.next:=a[x];a[x]:=p;
26 end;
27 procedure dfs(y,x:longint);
28 var p:point;i:longint;
29 begin
30 p:=a[x];b[x]:=1;i:=1;
31 while p<>nil do
32 begin
33 if p^.g<>y then
34 begin
35 dfs(x,p^.g);
36 if b[p^.g]>(n div 2) then i:=0;
37 inc(b[x],b[p^.g]);
38
39 end;
40 p:=p^.next;
41 end;
42 if ((n-b[x])<=(n div 2)) and (i=1) then
43 begin
44 inc(c[0]);
45 c[c[0]]:=x;
46 end;
47 end;
48 procedure sort(l,r:longint);
49 var i,j,x,y:longint;
50 begin
51 i:=l;j:=r;x:=c[(l+r) div 2];
52 repeat
53 while c[i]<x do inc(i);
54 while c[j]>x do dec(j);
55 if i<=j then
56 begin
57 y:=c[i];c[i]:=c[j];c[j]:=y;
58 inc(i);dec(j);
59 end;
60 until i>j;
61 if i<r then sort(i,r);
62 if l<j then sort(l,j);
63 end;
64 begin
65 readln(n);c[0]:=0;
66 for i:=1 to n do a[i]:=nil;
67 for i:=1 to n-1 do
68 begin
69 readln(j,k);
70 add(j,k);add(k,j);
71 end;
72 dfs(0,1);sort(1,c[0]);
73 for i:=1 to c[0] do writeln(c[i]);
74 readln;
75 end.
- “协变”、“逆变”与Delegate类型转换
- 如今的人工智能是不是真的已经很聪明了?
- 【Scikit-Learn 中文文档】聚类 - 无监督学习 - 用户指南 | ApacheCN
- Delegate如何进行类型转换?
- 个性化推荐系统(一)---今日头条等的内容划分、分类
- ASP.NET Core的配置(2):配置模型详解
- 如何解决jQuery Validation针对动态添加的表单无法工作的问题?
- 数据结构 链表改进
- 数据结构 栈&队列
- 终端品牌域名过期被拍卖 价值六位数
- TensorFlow 深度学习笔记 TensorFlow实现与优化深度神经网络
- ASP.NET的路由系统:路由映射
- ASP.NET Core的配置(3): 将配置绑定为对象[上篇]
- ASP.NET的路由系统:URL与物理文件的分离
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 如何使用docker搭建PHP环境
- Go语言入门(四)Map&函数
- 一天一大 leet(每日温度)难度:中等 DAY-11
- Go语言入门(五)结构体&练习
- 利用hexo和github或coding 搭免费个人博客
- window 指令之 tree
- Go语言入门(六)结构体后续&指针
- 一天一大 leet(二叉树的序列化与反序列化)难度:困难 DAY-16
- 一天一大 leet(三数之和)难度:中等 DAY-12
- MongoDB Docker版本:基础入门和复制集
- Django连接MySql使用models处理数据
- 一天一大 leet(爬楼梯)难度:简单 DAY-13
- 一天一大 leet(最长公共前缀)难度:简单 DAY-15
- Go语言入门(七)goroutine和channel
- 一天一大 leet(从先序遍历还原二叉树)难度:困难 DAY-18