思路很明显了,假设是点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. 番茄花园Ghost Win10系统X64位10041装机版2015年4月

    转载:系统妈,系统下载地址:http://www.xitongma.com/windows10/2015-04-01/6639.html 番茄花园Ghost Win10系统X64位10041装机版20 ...

  2. Relational Algebra 关系代数

    Relational Algebra Relational Algebra is the mathematical basis for the query language SQL Introduct ...

  3. dd - 转换和拷贝文件

    摘要 dd [--help] [--version] [if=file] [of=file] [ibs=bytes] [obs=bytes] [bs=bytes] [cbs=bytes] [skip= ...

  4. confluence的安装

    参考链接:https://www.ilanni.com/?p=11989 一.什么是confluence confluence是一个专业的企业知识管理与协同软件,可以用于构建企业wiki.通过它可以实 ...

  5. 机器学习_决策树Python代码详解

    决策树优点:计算复杂度不高,输出结果易于理解,对中间值的缺失不敏感,可以处理不相关特征数据: 决策树缺点:可能会产生过度匹配问题. 决策树的一般步骤: (1)代码中def 1,计算给定数据集的香农熵: ...

  6. JavaSE-24 多线程

    学习要点 线程概述 Java中的多线程 线程状态 线程调度 线程同步 线程间通信 线程概述 1  进程 进程就是应用程序的执行实例. 进程特征: 动态性:动态产生,动态消亡.进程启动,系统为其分配资源 ...

  7. Day 14A 网络编程入门

    ---恢复内容开始--- 计算机网络基础 计算机网络是独立自主的计算机互联而成的系统的总称,组建计算机网络最主要的目的是实现多台计算机之间的通信和资源共享.今天计算机网络中的设备和计算机网络的用户已经 ...

  8. weblogic启动 web应用ssh关闭 nohup命令

    平时我们操作linux服务器的时候,都是通过ssh远程连接,然后启动服务器上的服务的,所以有时候启动weblogic,我们关闭ssh,weblogic 服务也相应的关闭了,那么我们就只能用nohup这 ...

  9. vue cli本地开发跨域问题解决

    首先呢,找到在目录里找到config文件夹 然后修改config文件夹下的index.js里面dev的配置项proxyTable: 修改为: proxyTable: { '/api': { targe ...

  10. JS 水印图片合成实例页面

    CSS代码: .clip { position: absolute; clip: rect(0 0 0 0); } HTML代码: <input type="file" id ...