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


首先以1为根,然后记录size,sum,size记录有多少个儿子节点,sum记录答案,首先的更新就是sum[u]=sum[v]+size[v]

然后我们考虑旋根,当前根为u,要旋上来的节点为v,那么转移为

sum[x]=sum[x]-sum[son]-size[son];

size[x]=size[x]-size[son];

sum[son]=sum[son]+sum[x]+size[x];

size[son]=size[son]+size[x];

一定要按顺序,其实这个转移也不难想

/*program from Wolfycz*/
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define inf 0x7f7f7f7f
using namespace std;
typedef long long ll;
typedef unsigned int ui;
typedef unsigned long long ull;
inline int read(){
int x=0,f=1;char ch=getchar();
for (;ch<'0'||ch>'9';ch=getchar()) if (ch=='-') f=-1;
for (;ch>='0'&&ch<='9';ch=getchar()) x=(x<<1)+(x<<3)+ch-'0';
return x*f;
}
inline void print(int x){
if (x>=10) print(x/10);
putchar(x%10+'0');
}
const int N=1e6;
int pre[(N<<1)+10],now[N+10],child[(N<<1)+10],size[N+10];
int tot,ID;
ll sum[N+10],Max;
void join(int x,int y){pre[++tot]=now[x],now[x]=tot,child[tot]=y;}
void build(int x,int fa){
size[x]=1;
for (int p=now[x],son=child[p];p;p=pre[p],son=child[p]){
if (son==fa) continue;
build(son,x);
size[x]+=size[son];
sum[x]+=sum[son]+size[son];
}
}
void work(int x,int fa){
if (Max<=sum[x]){
Max<sum[x]?ID=x:ID=min(ID,x);
Max=sum[x];
}
int size_x=size[x];
ll sum_x=sum[x];
for (int p=now[x],son=child[p];p;p=pre[p],son=child[p]){
if (son==fa) continue;
int size_son=size[son];
ll sum_son=sum[son];
sum[x]=sum[x]-sum[son]-size[son];
size[x]=size[x]-size[son];
sum[son]=sum[son]+sum[x]+size[x];
size[son]=size[son]+size[x];
work(son,x);
size[x]=size_x,sum[x]=sum_x;
size[son]=size_son,sum[son]=sum_son;
}
}
int main(){
int n=read();
for (int i=1;i<n;i++){
int x=read(),y=read();
join(x,y),join(y,x);
}
build(1,0);
work(1,0);
printf("%d\n",ID);
return 0;
}

[POI2008]Sta的更多相关文章

  1. BZOJ 1131: [POI2008]Sta( dfs )

    对于一棵树, 考虑root的答案向它的孩子转移, 应该是 ans[son] = (ans[root] - size[son]) + (n - size[son]). so , 先 dfs 预处理一下, ...

  2. 1131: [POI2008]Sta

    1131: [POI2008]Sta Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 783  Solved: 235[Submit][Status] ...

  3. BZOJ1131 POI2008 Sta 【树形DP】

    BZOJ1131 POI2008 Sta Description 给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大 Input 给出一个数字N,代表有N个点.N<=10 ...

  4. bzoj 1131 [POI2008]Sta 树形dp 转移根模板题

    [POI2008]Sta Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1889  Solved: 729[Submit][Status][Discu ...

  5. [POI2008]Sta(树形dp)

    [POI2008]Sta Description 给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大 Input 给出一个数字N,代表有N个点.N<=1000000 下面 ...

  6. [BZOJ1131][POI2008] Sta 树的深度

    Description 给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大 Input 给出一个数字N,代表有N个点.N<=1000000 下面N-1条边. Output ...

  7. [BZOJ1131/POI2008]Sta树的深度

    Description 给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大 Input 给出一个数字N,代表有N个点.N<=1000000 下面N-1条边. Output ...

  8. BZOJ 1131: [POI2008]Sta

    Description 一棵树,问以那个节点为根时根的总和最大. Sol DFS+树形DP. 第一遍统计一下 size 和 d. 第二遍转移根,统计答案就行了. Code /************* ...

  9. bzoj1131: [POI2008]Sta

    思路:首先先求出以1为根的答案,然后考虑由i转移到i的儿子的答案的变化,显然以son[i]为根的子树的所有结点的深度都会减一,其余的点的深度都会加一,然后就可以直接O(n)求出所有结点的答案,然后取m ...

  10. BZOJ1131 [POI2008]Sta 其他

    原文链接http://www.cnblogs.com/zhouzhendong/p/8081100.html 题目传送门 - BZOJ1131 题意概括 给出一个N个点的树,找出一个点来,以这个点为根 ...

随机推荐

  1. Meteor Assets资源

    静态服务器资源位于应用程序内的 private 子文件夹.在这个例子中,我们将学习如何从简单的JSON文件中使用数据. 第1步 - 创建文件和文件夹 让我们创建一个 private 文件夹并在这个文件 ...

  2. BloomFilter学习

    看大数据面试题,看到BloomFilter,找了篇文章学习一下: http://www.cnblogs.com/heaad/archive/2011/01/02/1924195.html Bloom ...

  3. linux设备驱动归纳总结

    前言: (总结已经基本写完,这段时间我会从新排版和修正.错误总会有的,望能指正!) 前段时间学习了嵌入式驱动,趁着没开始找工作,这段时间我会每天抽出时间来复习. 我的总结是根据学习时的笔记(李杨老师授 ...

  4. 再谈OpenCV

    虽然之前写过一篇关于OpenCV的介绍(http://blog.csdn.net/carson2005/article/details/5822149).但依旧有朋友对其不甚了解.所以,常常能碰到有人 ...

  5. Python筛选法(算出十亿之内所有的质数之和)

    其实别人写的挺好的了....直接上链接吧http://blog.csdn.net/power721/article/details/8216619

  6. SQL yog过期后教你怎么让他不过期

    打开注册表  安装sqlyog后,进入注册表编辑器,进入\HEYK_CURRENT_USER\Software\,找到以{}括起来的那项直接干掉! 1, regedit 2,修改 3,

  7. 【转载】在VS2008中使用WSE 3.0过程全记录

    WSE全称是Web Service Enhancement,提供了更好的安全性实现,以及大对象传输的设计. 有关WSE的一些介绍,如果不清楚,可以参考下面的链接 官方介绍:http://www.mic ...

  8. Node-webkit 介绍

    什么是Node-webkit ? Node-webkit 是Intelproject师rogerwang写的一个基于node.js和chromium的应用程序执行环境,通过node-webkit,我们 ...

  9. JAVA程序员常用软件整理

    Java类软件:-------------------------------JDK7.0:http://pan.baidu.com/s/1jGFYvAYMyclipse8.5破解版:http://p ...

  10. jdbc 操作步骤

    package org.db; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLExcept ...