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)相关推荐

  1. 【2767】2017年10月10日提高组T1 xjh的旅行

    问题描述 lahub是一个旅行者的粉丝,他想成为一个真正的旅行者,所以他计划开始一段旅行.lahub想去参观n个目的地(都在一条直道上).lahub在起点开始他的旅行.第i个目的地和起点的距离为ai千 ...

  2. SSL2811 2017年10月30日提高组T2 摘Galo(树形dp)

    2017年10月30日提高组T2 摘Galo Description 0v0在野外看到了一棵Galo树,看到食物的0v0瞪大了眼睛,变成了OvO. 这棵Galo树可以看做是一棵以1号点为根的n个点的有 ...

  3. SSL2793 2017年10月26日提高组T2 Deep(博弈)

    2017年10月26日提高组T2 Deep Description 失败的燃烧军团想要逃回深渊,Khadgar 想要追击它们. 然而进入深渊的传送门只有一座,燃烧军团和Khadgar 各有一些法力水晶 ...

  4. JZOJ6月20日提高组T1 小麦亩产一千八

    JZOJ6月20日提高组T1 小麦亩产一千八 题目 Description Input Output Sample Input Data Constraint 分析 Code 题目 Descripti ...

  5. 【NOIP2015模拟11.3晚】JZOJ7月31日提高组T1 次芝麻

    [NOIP2015模拟11.3晚]JZOJ7月31日提高组T1 次芝麻 题目 题解 题意 分析 Code 题目 题解 题意 给出两个数 x x x, y y y 每次操作会将小的数乘2,大的数减去小的 ...

  6. 【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到第 ...

  7. 【SSLGZ 2811】2017年10月30日提高组T2 摘Galo

    问题描述 0v0在野外看到了一棵Galo树,看到食物的0v0瞪大了眼睛,变成了OvO. 这棵Galo树可以看做是一棵以1号点为根的n个点的有根数,除了根节点以外,每个节点i都有一个Galo,美味度为w ...

  8. 2017年10月23日提高组T2 灵知的太阳信仰 单调队列优化dp

    Description 在炽热的核熔炉中,居住着一位少女,名为灵乌路空. 据说,从来没有人敢踏入过那个熔炉,因为人们畏缩于空所持有的力量--核能. 核焰,可融真金. 咳咳. 每次核融的时候,空都会选取 ...

  9. 纪中训练5月23日提高组T1

    [USACO 2017 US Open Silver]Bovine Genomics 题解: 暴力 把ACGT对应成数字,然后记录 接着就是暴力找三个位置 然后又是暴力判断 综上所述: 暴力 #inc ...

最新文章

  1. vs2010往oracle 10g中插入数据
  2. JspServlet
  3. Map-Reduce 思想在 ABAP 编程中的一个实际应用案例
  4. 淘宝秒杀系统设计的几个注意点
  5. 字符设备驱动基础篇1——简单的驱动源码分析
  6. ajax通过什么实现,ajax(通过jQuery实现)
  7. 有线与无线网络配置相关工具
  8. 1月10日云栖精选夜读:专访金榕:四年蜕变,阿里iDST是如何登上浪潮之巅的?
  9. SpringBoot整合Shiro框架
  10. john破解kali密码
  11. oracle19c报价_Oracle 19C EM
  12. STAR原则是什么?
  13. Elasticsearch开发进阶指南——如何选择合适的ES版本
  14. mysql CONCAT和DATE_ADD函数的使用
  15. Java SE Development Kit (JDK) 安装
  16. HDU1042 N!
  17. 命令行把java项目打成jar包
  18. vulnhub——Empire:LupinOne
  19. 笔记③:牛客校招冲刺集训营---C++工程师(5.9 C++新特性)
  20. ROS发布静态tf变换

热门文章

  1. 以静制动的TensorFlow Fold
  2. gis与计算机科学之间的联系,GIS地理信息系统课程论文 地理信息系统与其他学科的关系及应用前景...
  3. 你需要这样一个Ros软路由—— 路由器+外网+一号通ip线路=动态ip的WiFi信号
  4. Excel操作技巧:三列内容合并生成到另外一列中;在判断某列里面的值在另外列中是否存在
  5. linux内核设置mac地址,Linux下如何修改网卡MAC地址
  6. 8086汇编(10、int9键盘中断)
  7. 【MM ECC VS S4】MM模块中ECC与S4的区别
  8. ROS2网络课程资料分享2019.10.26
  9. 新旧两种方法给年份year,定义一个宏,以判别该年份是否闰年。提示:宏名可以定义为LEAP_YEAR,形参为y,既定义宏的形式为 #define LEAP_YEAR(y)
  10. Mac上Idea的基础操作(Windows类同)