Codeforces708C Centroids 【树形dp】
题意:给定一棵n个结点的树,问:对于每个结点,能否通过删除一条边并添加一条边使得仍是树,并且删除该结点后得到的各个连通分量结点数 <= n/2?
题解:树形dp,两遍dfs,第一遍dfs求得以各个结点为根的子树的结点数,以及各个结点下面切掉某条边后最多可切出多少个结点;
第二遍dfs求得每个结点上面切掉某条边后最多可切出多少个结点。
#include <bits/stdc++.h>
using namespace std;
#define X first
#define Y second
typedef long long ll;
const int N = 4e5+;
vector<int> ve[N];
int num[N], maxson[N], down[N], up[N];
int n;
void gmax(int& a, int b){ if(a < b) a = b;}
void dfs(int x, int fa){
// printf("dfs x %d, fa %d\n", x, fa);
num[x] = ;
down[x] = maxson[x] = ;
for(int i = ; i < ve[x].size(); i++){
int y = ve[x][i];
if(y == fa) continue ;
dfs(y, x);
num[x] += num[y];
gmax(down[x], num[y] <= n/? num[y]: down[y]);
gmax(maxson[x], num[y]);
}
}
multiset<int>::iterator it;
void dfs2(int x, int fa){
// printf("dfs2 x %d, fa %d\n", x, fa);
multiset<int> se;
for(int i = ; i < ve[x].size(); i++){
int y = ve[x][i];
if(y != fa) se.insert( num[y] <= n/? num[y]:down[y] );
} for(int i = ; i < ve[x].size(); i++){
int y = ve[x][i];
if(y != fa){
if(n-num[y] <= n/)
up[y] = n-num[y];
else {
it = se.find( num[y] <= n/? num[y]:down[y] );
se.erase(it);
gmax(up[y], up[x]);
if(!se.empty())
gmax(up[y], *se.rbegin());
se.insert( num[y] <= n/? num[y]:down[y] );
}
dfs2(y, x);
}
}
} int main(){
int u, v; scanf("%d", &n);
for(int i = ; i < n; i++){
scanf("%d%d", &u, &v);
ve[u].push_back(v), ve[v].push_back(u);
}
dfs(, -);
dfs2(, -);
bool tag;
// for(int i = 1; i <= n; i++)
// cout << maxson[i] << ' ' << num[i] << ' ' << down[i] << ' ' << up[i] << endl;
for(int i = ; i <= n; i++){
if(maxson[i] <= n/&&n-num[i] <= n/)//不用切
tag = true;
else if(n-num[i] > n/)//要切上面
tag = n-num[i]-up[i] <= n/;
else//要切下面
tag = maxson[i]-down[i] <= n/;
putchar(tag+'');
putchar(i == n? '\n':' ');
}
return ;
}
Codeforces708C Centroids 【树形dp】的更多相关文章
- codeforces 709E E. Centroids(树形dp)
题目链接: E. Centroids time limit per test 4 seconds memory limit per test 512 megabytes input standard ...
- Codeforces 709E. Centroids 树形DP
题目链接:http://codeforces.com/contest/709/problem/E 题意: 给你一棵树,你可以任删一条边和加一条边,只要使得其仍然是一棵树,输出每个点是否都能成为重心 题 ...
- CF708C Centroids(树形DP)
发现变重心就是往重心上割,所以\(\text{up and down}\),一遍统计子树最大\(size\),一遍最优割子树,\(down\),\(up\)出信息,最后\(DFS\)出可行解 #inc ...
- Codeforces-708C(树形DP)
一.题意 给定一颗树,对于每一个节点,判断能否在树中删除某一条边,然后在任意两个节点之间加一条边,使这个点成为重心. 注:删除树中某一条边后,标程并不会这么无聊地把这棵树变成两个孤立的连通图,而是再让 ...
- AIM Tech Round 3 (Div. 1) (构造,树形dp,费用流,概率dp)
B. Recover the String 大意: 求构造01字符串使得子序列00,01,10,11的个数恰好为$a_{00},a_{01},a_{10},a_{11}$ 挺简单的构造, 注意到可以通 ...
- poj3417 LCA + 树形dp
Network Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 4478 Accepted: 1292 Descripti ...
- COGS 2532. [HZOI 2016]树之美 树形dp
可以发现这道题的数据范围有些奇怪,为毛n辣么大,而k只有10 我们从树形dp的角度来考虑这个问题. 如果我们设f[x][k]表示与x距离为k的点的数量,那么我们可以O(1)回答一个询问 可是这样的话d ...
- 【BZOJ-4726】Sabota? 树形DP
4726: [POI2017]Sabota? Time Limit: 20 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 128 Solved ...
- 树形DP+DFS序+树状数组 HDOJ 5293 Tree chain problem(树链问题)
题目链接 题意: 有n个点的一棵树.其中树上有m条已知的链,每条链有一个权值.从中选出任意个不相交的链使得链的权值和最大. 思路: 树形DP.设dp[i]表示i的子树下的最优权值和,sum[i]表示不 ...
随机推荐
- 编码-截取中文-去除HTML字符
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> < ...
- Zend Debugger 配置
到官网 http://www.zend.com/en/products/studio/downloads 下载 windows 版 Studio Web Debugger 打开下载得到的压缩包,里面有 ...
- [ios]iOS 图形编程总结
转自:http://www.cocoachina.com/ios/20141104/10124.html iOS实现图形编程可以使用三种API(UIKIT.Core Graphics.OpenGL E ...
- RTC系统
http://blog.csdn.net/fanqipin/article/details/8089995 一. RTC及驱动简介 RTC即real time clock实时时钟,主要用于为操作系统提 ...
- nodejs 与数据库的连接
//创建连接(封装) var mysql = require("mysql") function name(){ var con = mysql.createConnection( ...
- TreeView 读取 xml 显示节点
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Tree2_xml.aspx.c ...
- 2017年1月6日 星期五 --出埃及记 Exodus 21:32
2017年1月6日 星期五 --出埃及记 Exodus 21:32 If the bull gores a male or female slave, the owner must pay thirt ...
- (转)Linux下安装rar fou linux
在Linux下安装rar fou linux rar for linux 软件下载地址:http://www.rarsoft.com/download.htm 到目前为止最新的版本为4.10 beta ...
- myeclipse页面编辑框空格、回车符、对齐出现特殊字符
myeclipse页面编辑框空格.回车符.对齐出现特殊字符 解决办法:window-preferences-general-editors-Text Editors 把show whitespa ...
- 第五课 SharedPrefereneces
SharedPreferences总结: 一.SharedPreferences特点 1.本质是基于xml文件储存key-value对数据: 2.SharedPreferences对象本身只能获取数据 ...