思路很明显了,假设是点x,则看它的子树中是否有大于n/2的,如果有,则在该子树中剪去它可以剪的且小于n/2的,接到点x上。

则统计出在以x点为根的子树中,它的各子树可以剪去的且小于n/2的最大子子树。对于除去以x为根的子树的其他部分,记为up,则同样地统计它的可以剪除的符合条件的子树,最后对每个点判断一下就可以了。

代码如下::(额,想的时候对up的这个不知道怎么写~谢指导)

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
//#include <bitset>
using namespace std; const int MAXN = 400010; vector<int> t[MAXN];
int par[MAXN], sz[MAXN], up[MAXN], dw[MAXN], n; void dfs_sz(int u, int parent){
par[u] = parent;
sz[u] = 1;
int size = t[u].size();
for(int i = 0; i< size; i++){
int v = t[u][i];
if(v == parent) continue;
dfs_sz(v, u);
sz[u] += sz[v];
}
} void dfs_down(int u, int parent){
dw[u] = (sz[u] <= n/2 ? sz[u] : 0);
int size = t[u].size();
for(int i = 0; i < size; i++){
int v = t[u][i];
if(v == parent) continue;
dfs_down(v, u);
dw[u] = max(dw[u], dw[v]);
}
} void dfs_up(int u, int parent, int val){
up[u] = max((n - sz[u] <= n /2? n - sz[u]: 0), val);
int size = t[u].size(); int mx0 = 0, mx1 = 0; for(int i = 0; i < size; i++){
int v = t[u][i];
if(v == parent) continue;
if(dw[v] >= mx0){
mx1 = mx0;
mx0 = dw[v];
}
else if(dw[v] >= mx1){
mx1 = dw[v];
}
} for(int i = 0; i < size ; i++){
int v = t[u][i];
if(v == parent) continue;
dfs_up(v, u, max(up[u], (mx0 == dw[v]? mx1 : mx0 ))); } } int main(){ int u, v; scanf("%d", &n);
for(int i = 1; i< n; i++){
scanf("%d%d", &u, &v);
t[u].push_back(v);
t[v].push_back(u);
} dfs_sz(1, -1);
dfs_down(1, -1);
dfs_up(1, -1, 0); for(int i = 1; i <= n; i++){
int ans = 1;
int size = t[i].size();
for(int k = 0; k < size; k++){
int u = t[i][k];
if(u == par[i]){
if(n - sz[i] - up[i] > n/2)
ans = 0;
}
else {
if(sz[u] - dw[u] > n/ 2)
ans = 0;
} }
printf("%d", ans);
if(i == n) printf("\n");
else printf(" "); } return 0;
}

  

AIM Tech R3 div2 E Centroid的更多相关文章

  1. Codeforces Aim Tech Round4 (Div2) D

    题目链接: 题意: 给你一个严格升序的单链表,但是是用数组来存放的.对于每一个位置来说,你可以知道这个位置的值和下一个的位置.你每一个可以询问一个位置,机器会告诉你这个位置的值,和下一个位置的指针.要 ...

  2. codeforce AIM tech Round 4 div 2 B rectangles

    2017-08-25 15:32:14 writer:pprp 题目: B. Rectangles time limit per test 1 second memory limit per test ...

  3. AIM Tech Round 5 1028cf(A-E)

    AIM Tech Round 5 (codeforces上题目编号是1028)(A-E) ---完全被这次比赛打击,自己真的很渣--- 战况 依旧3题选手 被构造题坑得好惨 稍稍涨了rating,希望 ...

  4. AIM Tech Round (Div. 2)——ABCD

    http://codeforces.com/contest/624 A.python是用来写div2的AB题的... a, b, x, y = map(float, raw_input().split ...

  5. AIM Tech Round 3 (Div. 2)

    #include <iostream> using namespace std; ]; int main() { int n, b, d; cin >> n >> ...

  6. AIM Tech Round 3 (Div. 2) A B C D

    虽然打的时候是深夜但是状态比较好 但还是犯了好多错误..加分场愣是打成了降分场 ABC都比较水 一会敲完去看D 很快的就想出了求0和1个数的办法 然后一直wa在第四组..快结束的时候B因为低级错误被h ...

  7. AIM Tech Round 3 (Div. 2) B

    Description Vasya takes part in the orienteering competition. There are n checkpoints located along ...

  8. AIM Tech Round 3 (Div. 2) A

    Description Kolya is going to make fresh orange juice. He has n oranges of sizes a1, a2, ..., an. Ko ...

  9. AIM Tech Round (Div. 2) D. Array GCD dp

    D. Array GCD 题目连接: http://codeforces.com/contest/624/problem/D Description You are given array ai of ...

随机推荐

  1. Objective-C 里面的类对象复用小结

    OC 提供了单继承 (Inheritance), Category, Extension, Protocol 这几种基本的类与对象层面的复用机制,作一小结. 在这几个机制中,继承提供了纵向的复用,可以 ...

  2. gitlab数据迁移到docker容器

    需求:想把服务器上的gitlab迁移到docker容器里面注意:gitlab的迁移,必须保持gitlab的版本一致,此处使用的是:8.4.3,数据库版本和类型一致,此处使用的是postgresql 9 ...

  3. vim要粘贴的话,先set paste,然后粘贴,然后再set nopaste

    要粘贴的话,先set paste,然后粘贴,然后再set nopaste

  4. 微信小程序UI组件库 iView Weapp快速上手

    概述 今天在网上突然看到iView新出了一个微信小程序的组件库iView Weapp,自己就上手试了一下,发现用起来还是不错的,把自己使用的过程与大家分享下. 一 预览iView组件 1.可以在手机上 ...

  5. 自动下载相对应的jar包

    一.去到需要的 maven下载地址 http://mvnrepository.com/artifact/org.apache.struts/struts2-core/2.5.13 二.然后去到 pom ...

  6. CSS 全局样式

    设置全局 CSS 样式:基本的 HTML 元素均可以通过 class 设置样式并得到增强效果:还有先进的栅格系统.

  7. [Python3网络爬虫开发实战] 1.7.3-Appium的安装

    Appium是移动端的自动化测试工具,类似于前面所说的Selenium,利用它可以驱动Android.iOS等设备完成自动化测试,比如模拟点击.滑动.输入等操作,其官方网站为:http://appiu ...

  8. 安装配置elasticsearch、安装elasticsearch-analysis-ik插件、mysql导入数据到elasticsearch、安装yii2-elasticsearch及使用

    一.安装elasticsearch 获取elasticsearch的rpm:wget https://download.elastic.co/elasticsearch/release/org/ela ...

  9. buf.fill()

    buf.fill(value[, offset[, end]][, encoding]) value {String} | {Buffer} | {Number} offset {Number} 默认 ...

  10. assert.ok()详解

    assert.ok(value[, message]) 测试 value 是否为真值.它等同于 assert.equal(!!value, true, message). 如果 value 不是真值, ...