1131: [POI2008]Sta
时间:2022-05-07
本文章向大家介绍1131: [POI2008]Sta,主要内容包括1131: [POI2008]Sta、Description、Input、Output、Sample Input、Sample Output、HINT、Source、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
1131: [POI2008]Sta
Time Limit: 10 Sec Memory Limit: 162 MB
Submit: 783 Solved: 235
Description
给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大
Input
给出一个数字N,代表有N个点.N<=1000000 下面N-1条边.
Output
输出你所找到的点,如果具有多个解,请输出编号最小的那个.
Sample Input
8 1 4 5 6 4 5 6 7 6 8 2 4 3 4
Sample Output
7
HINT
Source
题解:一道萌萌哒树状DP,先是随便弄一个点然后建树,求出各点的深度,然后求和,然后在这个你建立的有根树上各个分支进行DP,以各个点为根时的深度并不难维护——设当前总和为X,你想转移到的子节点下属共计Y个节点(算自己),整个树N个节点,那么这次转移后的总和为X-Y+(N-Y),别的没了。。。对于P党小心202(爆栈!!!)
1 {$M 10000000,0,maxlongint}
2 type
3 point=^node;
4 node=record
5 g:longint;
6 next:point;
7 end;
8
9 var
10 i,j,k,l,m,n:longint;
11 a1,a2:int64;
12 a:array[0..2000000] of point;
13 b,c,d,e:array[0..2000000] of int64;
14 procedure add(x,y:longint);inline;
15 var p:point;
16 begin
17 if x=y then exit;
18 new(p);
19 p^.g:=y;
20 p^.next:=a[x];
21 a[x]:=p;
22 end;
23 procedure built(x:longint);inline;
24 var p:point;
25 begin
26 p:=a[x];
27 c[x]:=1;
28 while p<>nil do
29 begin
30 if d[p^.g]=0 then
31 begin
32 d[p^.g]:=1;
33 b[p^.g]:=b[x]+1;
34 built(p^.g);
35 c[x]:=c[x]+c[p^.g];
36 end;
37 p:=p^.next;
38 end;
39 end;
40 procedure run(x:longint);inline;
41 var p:point;
42 begin
43 p:=a[x];
44 while p<>nil do
45 begin
46 if d[p^.g]=0 then
47 begin
48 d[p^.g]:=1;
49 e[p^.g]:=e[x]+int64(n)-(2*c[p^.g]);
50 run(p^.g);
51 end;
52 p:=p^.next;
53 end;
54 end;
55
56 begin
57 readln(n);
58 for i:=1 to n do a[i]:=nil;
59 for i:=1 to n-1 do
60 begin
61 readln(j,k);
62 add(j,k);add(k,j);
63 end;
64 fillchar(b,sizeof(b),0);
65 fillchar(c,sizeof(c),0);
66 fillchar(d,sizeof(d),0);
67 d[1]:=1;
68 built(1);
69 fillchar(d,sizeof(d),0);
70 fillchar(e,sizeof(e),0);
71 d[1]:=1;
72 for i:=1 to n do e[1]:=e[1]+b[i];
73 run(1);
74 a1:=-1;a2:=0;
75 for i:=1 to n do
76 begin
77 if e[i]>a1 then
78 begin
79 a1:=e[i];
80 a2:=i;
81 end;
82 end;
83 writeln(a2);
84 readln;
85 end.
- 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 数组属性和方法
- 浅析Android加载字体包及封装的方法
- android实现滑动标签页效果的代码解析
- Android PC端用ADB抓取指定应用日志实现步骤
- Android studio 禁用AndroidX方式
- Android 实现把bitmap图片的某一部分的颜色改成其他颜色
- AndroidStudio构建项目提示错误信息“unable to find valid certification”的完美解决方案
- Android自定义View实现抖音飘动红心效果
- Android Studio 利用Splash制作APP启动界面的方法
- android surfaceView实现播放视频功能
- Android Studio中一套代码多渠道打包的实现方法
- Android自定义View实现圆环进度条
- Android启动页用户相关政策弹框的实现代码
- 10个好用的 HTML5 特性
- Android实现签名涂鸦手写板
- Android 开发使用Activity实现加载等待界面功能示例