BZOJ1131 POI2008 Sta


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


换根dp

第一次dfs记录一下以当前节点为根在原树中子树的dep值之和

第二次直接套路换根

开LL

别用vector存边


#include<bits/stdc++.h>
using namespace std;
#define N 1000000+10
#define LL long long
struct Edge{int v,next;}E[N<<1];
LL dep[N],f[N],g[N],siz[N],maxv=0;
int head[N],tot=0;
int ans,n;
void add(int u,int v){
E[++tot]=(Edge){v,head[u]};
head[u]=tot;
}
void dfs(int u,int fa){
f[u]=0;siz[u]=1;
siz[u]=1;
for(int i=head[u];i;i=E[i].next){
int v=E[i].v;
if(v==fa)continue;
dfs(v,u);
f[u]+=f[v];
siz[u]+=siz[v];
}
f[u]+=siz[u];
}
void dfs2(int u,int fa){
LL tmp=g[u]+f[u];
if(tmp>maxv)maxv=tmp,ans=u;
else if(tmp==maxv)ans=min(ans,u);
for(int i=head[u];i;i=E[i].next){
int v=E[i].v;
if(v==fa)continue;
g[v]=g[u]+f[u]-f[v]-siz[v]+n-siz[v];
dfs2(v,u);
}
}
int main(){
scanf("%d",&n);
for(int i=1;i<n;i++){
int u,v;scanf("%d%d",&u,&v);
add(u,v);
add(v,u);
}
dfs(1,0);
dfs2(1,0);
printf("%d",ans);
return 0;
}

BZOJ1131 POI2008 Sta 【树形DP】的更多相关文章

  1. BZOJ1131[POI2008]Sta——树形DP

    题目描述 给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大 输入 给出一个数字N,代表有N个点.N<=1000000 下面N-1条边. 输出 输出你所找到的点,如果具有 ...

  2. 【bzoj1131】[POI2008]Sta 树形dp

    题目描述 给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大 输入 给出一个数字N,代表有N个点.N<=1000000 下面N-1条边. 输出 输出你所找到的点,如果具有 ...

  3. 【BZOJ-1131】Sta 树形DP

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

  4. [bzoj1131][POI2008]Sta_树形dp

    Sta bzoj-1131 POI-2008 题目大意:给定一棵n个点的树,求一个根,使得深度和最大. 注释:$1\le n \le 10^6$. 想法:扭一扭即可. 扭的时候看看这个点当没当过根. ...

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

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

  6. Bzoj 1131[POI2008]STA-Station (树形DP)

    Bzoj 1131[POI2008]STA-Station (树形DP) 状态: 设\(f[i]\)为以\(i\)为根的深度之和,然后考虑从他父亲转移. 发现儿子的深度及其自己的深度\(-1\) 其余 ...

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

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

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

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

  9. bzoj1131: [POI2008]Sta

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

随机推荐

  1. ReverseLinkedList,ReverseLinkedList2,链表反转问题

    ReverseLinkedList: public class ReverseLinkedList { public ListNode reverseList(ListNode head) { if( ...

  2. tyvj 1027 木瓜地 简单模拟

    P1027 木瓜地 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 USACO OCT09 4TH 描述 Bessie不小心游荡出Farmer John的田地 ...

  3. CGI-FASTCGI-PHPFPM

    随意记录,摘自知乎 原文链接:https://segmentfault.com/q/1010000000256516 首先,CGI是干嘛的?CGI是为了保证web server传递过来的数据是标准格式 ...

  4. AJAX的例子

    var XMLHttpReq; //根据不同的浏览器创建不同的XMLHttpRequest对象function createXMLHttpRequest() {  if (window.XMLHttp ...

  5. Location对象常用知识

    产品终于上线,后期主要是优化了.在开发过程中用到了很多location对象的知识,趁现在有时间先整理一下. Location 对象存储在 Window 对象的 Location 属性中,可通过wind ...

  6. jdk动态代理使用及原理

    jdk动态代理的使用 1.创建实现InvocationHandler接口的类,实现invoke(Object proxy, Method method, Object[] args)接口,其中invo ...

  7. Idea_01_安装与激活

    一.前言 二.安装 1.下载 https://www.jetbrains.com/idea/ 2.安装 默认安装即可 三.激活 Idea激活有如下两种方式 Activation code Lisenc ...

  8. vue 侧边导航栏递归显示

    import axios from "axios"; import tabs1 from "../tab_content/tab1.vue"; import m ...

  9. LeetCode OJ:Range Sum Query - Immutable(区域和)

    Given nums = [-2, 0, 3, -5, 2, -1] sumRange(0, 2) -> 1 sumRange(2, 5) -> -1 sumRange(0, 5) -&g ...

  10. python 获取当前时间(关于time()时间问题的重要补充)

    python 获取当前时间   我有的时候写程序要用到当前时间,我就想用python去取当前的时间,虽然不是很难,但是老是忘记,用一次丢一次,为了能够更好的记住,我今天特意写下python 当前时间这 ...