SSL2668 2017年8月7日提高组T1 根(dfs)
2017年8月7日提高组T1 根
Description
一天,小B得到了一棵n个节点的树。无聊至极的小B想要找出一个点,使得以这个点为根时,所有点的深度之和最大。但小B打开手机,发现他最爱的re:creator又更新啦,于是这个无聊的任务就交给你了。
Input
第一行一个数n,接下来n-1行,每行两个数,表示一条边。
Output
一行一个整数,表示所有点深度之和的最大值的那个点。
如果最大值相同,输出拥有更小编号的点
分析:先求出以1为根所有节点的子树大小,然后求出此时深度和(dfs实现),最后从1的儿子开始换根,deep[son]=deep[fa]-f[son]+n-f[fa],f[i]表示i节点的子树大小。
代码
#include <cstdio>
#define maxn 2000000
using namespace std;struct edge
{int p,q,next;
}a[maxn];int n,ans,max,f[maxn],ls[maxn],ls1[maxn],x1[maxn],y1[maxn],next1[maxn];
int l,l1;
bool v[maxn];void add(int x,int y)
{l++;a[l].next=ls[x];ls[x]=l;a[l].p=x;a[l].q=y;
}int dfs(int x,int dep)
{v[x]=true;max+=dep;for (int i=ls[x];i;i=a[i].next)if (!v[a[i].q]){l1++;x1[l1]=x;y1[l1]=a[i].q;next1[l1]=ls1[x];ls1[x]=l1;f[x]+=dfs(a[i].q,dep+1)+f[a[i].q];}return 1;
}void dfs1(int x,int s)
{v[x]=true;if (s>max){ans=x;max=s;}if (max==s&&x<ans) ans=x;for (int i=ls1[x];i;i=next1[i])if (!v[y1[i]]&&y1[i]!=0){dfs1(y1[i],s-f[y1[i]]+(n-f[y1[i]]));}
}int main()
{scanf("%d",&n);for (int i=1;i<n;i++){int x,y;scanf("%d%d",&x,&y);add(x,y);add(y,x);}dfs(1,1);ans=1;for (int i=1;i<=n;i++){v[i]=false;f[i]++;}dfs1(1,max);printf("%d",ans);
}
SSL2668 2017年8月7日提高组T1 根(dfs)相关推荐
- 【2767】2017年10月10日提高组T1 xjh的旅行
问题描述 lahub是一个旅行者的粉丝,他想成为一个真正的旅行者,所以他计划开始一段旅行.lahub想去参观n个目的地(都在一条直道上).lahub在起点开始他的旅行.第i个目的地和起点的距离为ai千 ...
- SSL2811 2017年10月30日提高组T2 摘Galo(树形dp)
2017年10月30日提高组T2 摘Galo Description 0v0在野外看到了一棵Galo树,看到食物的0v0瞪大了眼睛,变成了OvO. 这棵Galo树可以看做是一棵以1号点为根的n个点的有 ...
- SSL2793 2017年10月26日提高组T2 Deep(博弈)
2017年10月26日提高组T2 Deep Description 失败的燃烧军团想要逃回深渊,Khadgar 想要追击它们. 然而进入深渊的传送门只有一座,燃烧军团和Khadgar 各有一些法力水晶 ...
- JZOJ6月20日提高组T1 小麦亩产一千八
JZOJ6月20日提高组T1 小麦亩产一千八 题目 Description Input Output Sample Input Data Constraint 分析 Code 题目 Descripti ...
- 【NOIP2015模拟11.3晚】JZOJ7月31日提高组T1 次芝麻
[NOIP2015模拟11.3晚]JZOJ7月31日提高组T1 次芝麻 题目 题解 题意 分析 Code 题目 题解 题意 给出两个数 x x x, y y y 每次操作会将小的数乘2,大的数减去小的 ...
- 【SSLGZ 2812】2017年10月30日提高组T2 凤凰院真凶
问题描述 输入 输出 第一行一个整数k,表示最长公共合法事件序列的长度. 样例输入 5 1 4 2 5 1 4 1 1 2 4 样例输出 2 数据范围 算法讨论 f[i][j]为a到第i个位置,b到第 ...
- 【SSLGZ 2811】2017年10月30日提高组T2 摘Galo
问题描述 0v0在野外看到了一棵Galo树,看到食物的0v0瞪大了眼睛,变成了OvO. 这棵Galo树可以看做是一棵以1号点为根的n个点的有根数,除了根节点以外,每个节点i都有一个Galo,美味度为w ...
- 2017年10月23日提高组T2 灵知的太阳信仰 单调队列优化dp
Description 在炽热的核熔炉中,居住着一位少女,名为灵乌路空. 据说,从来没有人敢踏入过那个熔炉,因为人们畏缩于空所持有的力量--核能. 核焰,可融真金. 咳咳. 每次核融的时候,空都会选取 ...
- 纪中训练5月23日提高组T1
[USACO 2017 US Open Silver]Bovine Genomics 题解: 暴力 把ACGT对应成数字,然后记录 接着就是暴力找三个位置 然后又是暴力判断 综上所述: 暴力 #inc ...
最新文章
- vs2010往oracle 10g中插入数据
- JspServlet
- Map-Reduce 思想在 ABAP 编程中的一个实际应用案例
- 淘宝秒杀系统设计的几个注意点
- 字符设备驱动基础篇1——简单的驱动源码分析
- ajax通过什么实现,ajax(通过jQuery实现)
- 有线与无线网络配置相关工具
- 1月10日云栖精选夜读:专访金榕:四年蜕变,阿里iDST是如何登上浪潮之巅的?
- SpringBoot整合Shiro框架
- john破解kali密码
- oracle19c报价_Oracle 19C EM
- STAR原则是什么?
- Elasticsearch开发进阶指南——如何选择合适的ES版本
- mysql CONCAT和DATE_ADD函数的使用
- Java SE Development Kit (JDK) 安装
- HDU1042 N!
- 命令行把java项目打成jar包
- vulnhub——Empire:LupinOne
- 笔记③:牛客校招冲刺集训营---C++工程师(5.9 C++新特性)
- ROS发布静态tf变换
热门文章
- 以静制动的TensorFlow Fold
- gis与计算机科学之间的联系,GIS地理信息系统课程论文 地理信息系统与其他学科的关系及应用前景...
- 你需要这样一个Ros软路由—— 路由器+外网+一号通ip线路=动态ip的WiFi信号
- Excel操作技巧:三列内容合并生成到另外一列中;在判断某列里面的值在另外列中是否存在
- linux内核设置mac地址,Linux下如何修改网卡MAC地址
- 8086汇编(10、int9键盘中断)
- 【MM ECC VS S4】MM模块中ECC与S4的区别
- ROS2网络课程资料分享2019.10.26
- 新旧两种方法给年份year,定义一个宏,以判别该年份是否闰年。提示:宏名可以定义为LEAP_YEAR,形参为y,既定义宏的形式为 #define LEAP_YEAR(y)
- Mac上Idea的基础操作(Windows类同)