AIM Tech R3 div2 E Centroid
思路很明显了,假设是点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的更多相关文章
- Codeforces Aim Tech Round4 (Div2) D
题目链接: 题意: 给你一个严格升序的单链表,但是是用数组来存放的.对于每一个位置来说,你可以知道这个位置的值和下一个的位置.你每一个可以询问一个位置,机器会告诉你这个位置的值,和下一个位置的指针.要 ...
- 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 ...
- AIM Tech Round 5 1028cf(A-E)
AIM Tech Round 5 (codeforces上题目编号是1028)(A-E) ---完全被这次比赛打击,自己真的很渣--- 战况 依旧3题选手 被构造题坑得好惨 稍稍涨了rating,希望 ...
- AIM Tech Round (Div. 2)——ABCD
http://codeforces.com/contest/624 A.python是用来写div2的AB题的... a, b, x, y = map(float, raw_input().split ...
- AIM Tech Round 3 (Div. 2)
#include <iostream> using namespace std; ]; int main() { int n, b, d; cin >> n >> ...
- AIM Tech Round 3 (Div. 2) A B C D
虽然打的时候是深夜但是状态比较好 但还是犯了好多错误..加分场愣是打成了降分场 ABC都比较水 一会敲完去看D 很快的就想出了求0和1个数的办法 然后一直wa在第四组..快结束的时候B因为低级错误被h ...
- AIM Tech Round 3 (Div. 2) B
Description Vasya takes part in the orienteering competition. There are n checkpoints located along ...
- 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 ...
- 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 ...
随机推荐
- html中 accept 属性
1.HTML <input> 标签的 accept 属性 在文件上传中使用 accept 属性,本例中的输入字段可以接受 GIF 和 JPEG 两种图像: <form> < ...
- 【译】x86程序员手册32-9.4 中断描述符表
9.4 Interrupt Descriptor Table 中断描述符表 The interrupt descriptor table (IDT) associates each interrupt ...
- 合并百度影音的离线数据 with python 第二版 基于yield
重新整理了一下代码. 增加了bdv,mkv的处理流程. 目前暂时支持windows平台. bdv,mkv,rmvb的不同处理流程 # -*- coding: UTF-8 -*- import os i ...
- 输出所有进程和进程ID
#include <windows.h> #include <tlhelp32.h> #include <tchar.h> #include <stdio.h ...
- Axure 9 面板折叠显示隐藏
1 首先放置一个面板1作为点击事件: 2 另外一个面板2或者其他组建,将其设置为动态面板,然后隐藏 3 给面板1添加如下事件,即可: 4 我们点击面板1,可以实现展开隐藏面板2的动态效果
- mysql limit关键字
select * from table_name limit [index, ] length; limit后面跟2个参数: index:索引号,从0开始计算,表示从哪一行开始: length:长度, ...
- pycharm connect to mysql
1.download mysql installer community 5.7.20 https://dev.mysql.com/downloads/file/?id=473605 or 链接:ht ...
- Android图像处理之BitMap(2)
Bitmap 相关 1. Bitmap比较特别 因为其不可创建 而只能借助于BitmapFactory 而根据图像来源又可分以下几种情况: * png图片 如:R.drawable.tianjin J ...
- Chrome插件:本地程序实现验证码破解(浏览器与本地进程通信)
利用chrome调用本地程序破解图片验证码background.js var port = null, tabId, fname = "vcode.chrome.v1.item.01&quo ...
- jquery的$().each,$.each的区别02
在jquery中,遍历对象和数组,经常会用到$().each和$.each(),两个方法.两个方法是有区别的,从而这两个方法在针对不同的操作上,显示了各自的特点. $().each,对于这个方法,在d ...