求树的重心的模板题,size[u]维护以u为根的子树大小,f[u]表示去掉u后的最大子树。

 1 #include<cstdio>
2 #include<iostream>
3 #include<cstring>
4 using namespace std;
5 const int INF=0x7f7f7f7f;
6 const int N=20005;
7 int head[N],to[N*2],nxt[N*2],f[N],size[N];
8 int tot,n,T,center,num;
9
10 void add(int x,int y){
11 nxt[++tot]=head[x];
12 head[x]=tot;
13 to[tot]=y;
14 }
15
16 void dfs(int u,int fa){
17 size[u]=1,f[u]=0;
18 for(int i=head[u];i;i=nxt[i]){
19 int v=to[i];
20 if(v==fa) continue;
21 dfs(v,u);
22 size[u]+=size[v];
23 f[u]=max(f[u],size[v]);
24 }
25 f[u]=max(f[u],n-size[u]);
26 if(f[u]<f[center]||f[u]==f[center]&&u<center){
27 center=u;
28 num=f[u];
29 }
30 }
31
32 void init(){
33 memset(head,0,sizeof(head));
34 tot=0;
35 center=num=0;
36 }
37
38 int main(){
39 scanf("%d",&T);
40 while(T--){
41 init();
42 scanf("%d",&n);
43 int x,y;
44 for(int i=1;i<n;i++){
45 scanf("%d%d",&x,&y);
46 add(x,y);add(y,x);
47 }
48 f[0]=INF;
49 dfs(1,0);
50 printf("%d %d\n",center,num);
51 }
52 return 0;
53 }

POJ1655 Balancing Act (树的重心)的更多相关文章

  1. POJ1655 Balancing Act(树的重心)

    题目链接 Balancing Act 就是求一棵树的重心,然后统计答案. #include <bits/stdc++.h> using namespace std; #define REP ...

  2. poj-1655 Balancing Act(树的重心+树形dp)

    题目链接: Balancing Act Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11845   Accepted: 4 ...

  3. 『Balancing Act 树的重心』

    树的重心 我们先来认识一下树的重心. 树的重心也叫树的质心.找到一个点,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心,删去重心后,生成的多棵树尽可能平衡. 根据树的重心的定义,我们可 ...

  4. POJ 1655 Balancing Act 树的重心

    Balancing Act   Description Consider a tree T with N (1 <= N <= 20,000) nodes numbered 1...N. ...

  5. poj1655 Balancing Act 找树的重心

    http://poj.org/problem? id=1655 Balancing Act Time Limit: 1000MS   Memory Limit: 65536K Total Submis ...

  6. POJ1655 Balancing Act(树的重心)

    树的重心即树上某结点,删除该结点后形成的森林中包含结点最多的树的结点数最少. 一个DFS就OK了.. #include<cstdio> #include<cstring> #i ...

  7. POJ-1655 Balancing Act(树的重心)

    Consider a tree T with N (1 <= N <= 20,000) nodes numbered 1...N. Deleting any node from the t ...

  8. poj1655 Balancing Act (dp? dfs?)

    Balancing Act Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14247   Accepted: 6026 De ...

  9. poj3107 求树的重心(&& poj1655 同样求树的重心)

    题目链接:http://poj.org/problem?id=3107 求树的重心,所谓树的重心就是:在无根树转换为有根树的过程中,去掉根节点之后,剩下的树的最大结点最小,该点即为重心. 剩下的数的 ...

随机推荐

  1. java 桥接方法

    1.桥接方法简介 桥接方法是jdk1.5引入泛型后,为使java泛型方法生成的字节码与jdk1.5版本之前的字节码兼容由编译器自动生成的. 可用method.isBridge() 判断method是否 ...

  2. 同时安装py2和py3-安装多版本python

    遇到问题和需求 我的电脑环境:先安装py2再安装py3,平时我工作中是使用python2,如何保证两个版本共存且让代码来选择要使用的版本. 遇到问题 在cmd中输入python,进入的是py2的环境, ...

  3. 第一天python3 封装和解构

    封装 将多个值使用逗号分割,组合在一起:本质上,返回一个元组,只是省略了小括号:python特有语法,被很多语言学习和借鉴;比如javascript:t1=(1,2) 定义为元组:t2=1,2 将1和 ...

  4. 4G巴歇尔槽流量采集网关

    首先向大家展示下拓扑图: 金鸽科技R10物联网网关,带有一个RS485口可以采集巴歇尔槽的液位状态,还提供一个网口用于给摄像头和现场其他的网络设备提供网络传输通道!R10A内置了巴歇尔槽液位换算成流量 ...

  5. Docker-Compose和Docker Network的应用

    1 # Docker-Compose分为两部分 2 # 一.Docker-Compose.yml 3 # 二.Docker-Compose 命令 4 5 # 桌面板的Docker(Win.Mac)会默 ...

  6. SQL 字符串去除空格函数汇总

    SQL 中使用ltrim()去除左边空格 ,rtrim()去除右边空格 ,没有同时去除左右空格的函数,要去除所有空格可以用replace(字符串,' ',''),将字符串里的空格替换为空 . 例:去除 ...

  7. JUC源码学习笔记4——原子类,CAS,Volatile内存屏障,缓存伪共享与UnSafe相关方法

    JUC源码学习笔记4--原子类,CAS,Volatile内存屏障,缓存伪共享与UnSafe相关方法 volatile的原理和内存屏障参考<Java并发编程的艺术> 原子类源码基于JDK8 ...

  8. 不止跑路,拯救误操作rm -rf /*的小伙儿

    摘要:误执行了 rm -rf /* 之后,除了跑路还能怎么办? 本文分享自华为云社区<拯救被 rm -rf 伤到的小伙>,作者:Gauss 松鼠会. 灵魂画师再次上线   在开饭前我们先了 ...

  9. 业务可视化-让你的流程图"Run"起来(6.定时任务&Spring-Batch的集成)

    前言 首先,感谢大家对上一篇文章[业务可视化-让你的流程图"Run"起来(5.SpringBoot集成&微服务编排)]的支持. 分享一下近期我对这个项目的一些改进. 在项目 ...

  10. 困扰所有SAP顾问多年的问题终于解决了

    相信每个从事SAP的顾问都会遇到这样的场景:听着歌,录着SAP数据,写着ABAP代码,突然一切都消失了. 是的,SAP GUI又崩溃闪退了. 可能你还一脸懵逼不知道发生什么事情,当你重新登录系统的时候 ...