CF708C:Centroids(树形dp & 重心构造判断)
来源:互联网 发布:淘宝助理批量删除描述 编辑:程序博客网 时间:2024/06/14 21:43
题意:一棵树,判断每个节点是否能够通过操作:(删去一条边变成两棵树,然后将其中一棵并到另一棵的任意节点上) 变成树的重心。
思路:如果一个点的某个儿子或者祖先节点数大于n/2,那么就要执行操作,找到该枝能移除的最大的子树X(<=n/2),该枝节点总数-X<=n/2就是可以,否则不可以。向上向下维护一个节点能删去的最大子树。
//reference:YxuanwKeith# include <bits/stdc++.h># define pb push_backusing namespace std;const int maxn = 4e5+30;vector<int>v[maxn];int n, sons[maxn], mx_son[maxn], down[maxn], up[maxn];void dfs(int cur, int pre){ sons[cur] = 1; for(auto to : v[cur]) { if(to == pre) continue; dfs(to, cur); sons[cur] += sons[to]; down[cur] = max(down[cur], (sons[to]>n/2)?down[to]:sons[to]); mx_son[cur] = max(mx_son[cur], sons[to]); }}void dfs2(int cur, int pre){ multiset<int>s; for(auto to : v[cur]) { if(to == pre) continue; s.insert((sons[to]>n/2)?down[to]:sons[to]); } for(auto to : v[cur]) { if(to == pre) continue; if(n-sons[to] <= n/2) up[to] = max(up[to], n-sons[to]); else { up[to] = max(up[to], up[cur]); s.erase(s.find((sons[to]>n/2)?down[to]:sons[to])); if(!s.empty()) up[to] = max(up[to], *s.rbegin()); s.insert((sons[to]>n/2)?down[to]:sons[to]); } dfs2(to, cur); }}int main(){ scanf("%d",&n); for(int i=1; i<n; ++i) { int a, b; scanf("%d%d",&a,&b); v[a].pb(b), v[b].pb(a); } dfs(1, 0); dfs2(1, 0); for(int i=1; i<=n; ++i) { int ans = 1; if(mx_son[i] > n/2) ans = mx_son[i]-down[i] <= n/2; if(n - sons[i] > n/2) ans = n-sons[i]-up[i] <= n/2; printf("%d ",ans); } return 0;}
阅读全文
0 0
- CF708C:Centroids(树形dp & 重心构造判断)
- [CF708C]Centroids
- Codeforces 708C Centroids(树形dp)
- 树形dp(Centroids,cf 708C)
- 【Codeforces708C】【树形dp】【贪心】Centroids
- CF 708C. Centroids 树形dp
- 树的重心(树形DP)
- Godfather (树形dp,树的重心)
- Godfather (树形dp + 树的重心)
- 重心-[Codeforces709E] Centroids
- AIM Tech Round 3 (Div. 2) E. Centroids (树形dp)
- AIM Tech Round 3 (Div. 1) C. Centroids(树形dp)
- AIM Tech Round 3 (Div. 2) E. Centroids (树形dp) ★ ★ ★
- AIM Tech Round 3 (Div. 1) C. Centroids(树形DP)
- poj 3107 Godfather(树形dp,树的重心)
- (poj3107Godfather,树形dp,next数组)树的重心
- POJ 1655 树的重心(树形 DP)
- Balancing Act (树形dp+树的重心)
- 7款bootstrap在线富文本编辑器
- 用python写一个简单的用户登陆程序(要求写成函数)
- twemproxy安装与简单应用
- 关于后端服务器框架的选择问题
- DAO与Service层的泛型抽取与实现
- CF708C:Centroids(树形dp & 重心构造判断)
- hdu 2767(tarjan)
- Kotlin开发activity跳转失败
- CASSANDRA READ or write timeout
- 我是管理员 oj152
- 交换机提示 %PLATFORM_PBR-4-SDM_MISMATCH
- 新的征程
- 场景管理方法之BVH介绍
- Hibernate入门(一)