题目链接

树的重心:
若树上的一个节点满足其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心。
1.任选一个点为根,只要统计出每个点的子树大小,就能很快求出每个点子树节点的数量的最大值。
2.求每个点子树的大小同样只需要自底向上的更新信息。
3.记sz[u]为子树u节点的数量(包括 u 本身)
4.sz[u] = 1 + 所有子节点v的sz之和

#include  <map>
#include  <set>
#include  <cmath>
#include  <queue>
#include  <cstdio>
#include  <vector>
#include  <climits>
#include  <cstring>
#include  <cstdlib>
#include  <iostream>
#include  <algorithm>
#include  <time.h>#define eb emplace_back
#define mp make_pair
#define mt make_tuple
#define fi first
#define se second
#define pb push_back
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
#define forn(i, n) for (int i = 0; i < (int)(n); ++i)
#define for1(i, n) for (int i = 1; i <= (int)(n); ++i)
#define ford(i, a, b) for (int i = (int)(a); i >= (int)b; --i)
#define fore(i, a, b) for (int i = (int)(a); i <= (int)(b); ++i)
#define rep(i, l, r) for (int i = (l); i <= (r); i++)
#define per(i, r, l) for (int i = (r); i >= (l); i--)
#define ms(x, y) memset(x, y, sizeof(x))
#define SZ(x) ((int)(x).size())using namespace std;typedef pair<int, int> pii;
typedef vector<int> vi;
typedef vector<pii> vpi;
typedef vector<vi> vvi;
typedef long long i64;
typedef vector<i64> vi64;
typedef vector<vi64> vvi64;
typedef pair<i64, i64> pi64;
typedef double ld;template<class T> bool uin(T &a, T b) { return a > b ? (a = b, true) : false; }
template<class T> bool uax(T &a, T b) { return a < b ? (a = b, true) : false; }const int maxn = 20000+100;
int tc, n, sz[maxn], fa[maxn], res[maxn];
vector<int> G[maxn];void init(int n) {memset(fa, 0, sizeof(fa));memset(sz, 0, sizeof(sz));for (int i = 1; i <= n; ++i) G[i].clear();
}
void dfs1(int x, int par) {sz[x] = 1;fa[x] = par;for (int i = 0; i < int(G[x].size()); ++i) {int to = G[x][i];if (to == par) continue;dfs1(to, x);sz[x] += sz[to];}
}int main() {ios::sync_with_stdio(false);cin.tie(0);cout.precision(10);cout << fixed;
#ifdef LOCAL_DEFINEfreopen("input.txt", "r", stdin);
#endifscanf("%d", &tc);while (tc--) {scanf("%d", &n);init(n);for (int i = 0; i < n - 1; ++i) {int u, v;scanf("%d%d", &u, &v);G[u].push_back(v);G[v].push_back(u);}dfs1(1, 0);for (int i = 1; i <= n; ++i) {int maxx = n - sz[i];for (int j = 0; j < int(G[i].size()); ++j) {int to = G[i][j];if (to == fa[i]) continue;    //!!maxx = max(maxx, sz[to]);}res[i] = maxx;}int ans = INT_MAX, node;for (int i = 1; i <= n; ++i) {if (res[i] < ans) {ans = res[i];node = i;}}printf("%d %d\n", node, ans);}#ifdef LOCAL_DEFINEcerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
#endifreturn 0;
}

POJ 1655 求树的重心(树形dp)相关推荐

  1. POJ 1655 Balancing Act[树的重心/树形dp]

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

  2. M - Kill the tree 计蒜客 - 42552(2019icpc徐州/树的重心/树形dp)

    vj地址 题目大意:找到每一颗子树的重心 思路: 树的重心的性质: 树的重心如果不唯一,则至多有两个,且这两个重心相邻 通过连接一条端点分别在两个树的边,来将两个树合并成一个,那么新的重心肯定是在原来 ...

  3. Poj 1655 【树的重心】

    题目链接:http://poj.org/problem?id=1655 题解: 设sum[i]为以i为根结点的树上有多少个结点,maxsum[i]为去掉i结点导致的森林中最大的树有多大 一开始建树时是 ...

  4. Godfather POJ - 3107 (求树的重心)

    题目链接 题意:给定一棵树,要求按编号从小到大输出重心. 树的重心: 定义:找到一个点满足其所有的子树中最大的子树节点数最少,那么这个点就算是树的重心. 性质: 1.删除重心后所得的所有子树,节点数不 ...

  5. 【POJ - 2378】Tree Cutting(树形dp,树的重心变形)

    题干: After Farmer John realized that Bessie had installed a "tree-shaped" network among his ...

  6. POJ 2342 | HDU 1520 Anniversary party 树形DP(入门题)

    传送门:POJ 2342 题目大意: 有若干人参加一个聚会,如果两个人之间有直接的上下属关系,则只能去一个.每个人都有个高兴值,问高兴值之和最大是多少? 思路: 之前一直觉得树形DP比较难,现在发现树 ...

  7. 【POJ - 1947】Rebuilding Roads (树形dp,背包问题,树形背包dp)

    题干: The cows have reconstructed Farmer John's farm, with its N barns (1 <= N <= 150, number 1. ...

  8. AcWing1073.树的中心(树形DP)题解

    题目传送门 题目描述 给定一棵树,树中包含 n 个结点(编号1~n)和 n−1 条无向边,每条边都有一个权值. 请你在树中找到一个点,使得该点到树中其他结点的最远距离最近. 输入格式 第一行包含整数 ...

  9. bzoj 3162: 独钓寒江雪 树哈希+树形dp

    题意 给出一棵无标号无根树,问本质不同的最大独立集数量.答案模1e9+7. n<=500000 分析 对于一般的情况,我们可以先找出树的重心作为根,然后进行树形dp.这样做有什么好处呢?通过根的 ...

最新文章

  1. Office 2016 for Mac试用之Excel篇
  2. Bootstrap CustomBox 弹层
  3. 自定义按键_DNF手游:策划宣布新增自定义按键布局,期待手游新版本的到来
  4. 如何解决使用JSON.stringify时遇到的循环引用问题
  5. Java EE 6 VS Spring 3:Java EE杀死了Spring? 没门!
  6. 关于源码,反码,补码(正数--负数)---------(-128)自己的理解
  7. “睡服”面试官系列第二十篇之generator函数的异步应用(建议收藏学习)
  8. 苹果秋季新品将要发布,MacBook Pro都有哪些变化
  9. 记录C++ Builder 6.0开发过程中的一个linker error
  10. 给我一个及时的问候——XMPP
  11. Vue:net::ERR_CONNECTION_REFUSED
  12. Virtualbox以及VWare在Win10下的不兼容
  13. 拼多多爆款商品采集工具
  14. 微信小程序实现退款,Java版。
  15. 结构体数组 初始化(转)
  16. 《缠中说禅108课》44:小级别背驰引发大级别转折
  17. 区块链随机数-区块链随机数的实现方案
  18. 文创礼品受追捧 华丽跨界火出圈
  19. uni项目中如何实现微信小程序文件下载(包会)
  20. VirtualBox网络配置:NAT+Host-Only实现连接外网+主机互通

热门文章

  1. XSS Challenges xss-quiz.int21h.jp
  2. c语言编写 构成的梯形,用C语言编写梯形
  3. 如何从一个大规模的文本中筛选出符合条件的记录
  4. java ftp文件大小_java如何获得ftp服务器上指定文件的大小
  5. AI优秀开源项目总结
  6. 数据中心网络机房动力环境监控解决方案
  7. 迅软科技协助化妆行业从根本上解决敏感数据泄露问题!
  8. 前端请求跨域,原来是谷歌浏览器的限制
  9. 小工具,大作用:教你如何利用EXCEL函数LINEST做回归分析
  10. MacBookPro 18款 连接上WiFi却无法上网