题目大意

给出一棵 \(n\) 个节点的树,删去其中两条边

使得分出的三个子树大小中最大与最小的差最小

分析

先一边 \(dfs\) 预处理出以 \(1\) 为根每个点的 \(size\)

然后按 \(dfs\) 的顺序枚举一个点,表示删去这个点返回父亲的边

记这个点为 \(x\)

分类讨论

第一种情况是删去当前点到根的一条边,记这条边下面的点为 \(y\)

这种情况会使子树 \(y\) 包含子树 \(x\)

第二种情况是删去不包含子树 \(x\) 的已经遍历过的边

这种情况须令外处理

于是我们算答案是要做两遍 \(dfs\)

具体细节看代码

\(Code\)

#include<cstdio>
#include<iostream>
#include<set>
using namespace std; const int N = 2e5 + 5;
int n, h[N], siz[N], ans;
set<int> s;
set<int>::iterator it;
struct edge{int to, nxt;}e[N << 1]; void add(int x, int y)
{
static int tot = 0;
e[++tot] = edge{y, h[x]}, h[x] = tot;
} void dfs(int x, int fa)
{
siz[x] = 1;
for(register int i = h[x], v; i; i = e[i].nxt)
{
v = e[i].to;
if (v == fa) continue;
dfs(v, x), siz[x] += siz[v];
}
} int getc(int x, int y, int z)
{
int a = max(max(x, y), z), b = min(min(x, y), z);
return a - b;
} void calc(int x)
{
int d = (n - siz[x]) >> 1;
it = s.lower_bound(d);
if (it != s.end()) ans = min(ans, getc(siz[x], *it, n - siz[x] - *it));
if (it != s.begin()) --it, ans = min(ans, getc(siz[x], *it, n - siz[x] - *it));
} void dfs1(int x, int fa)
{
calc(x);
s.insert(n - siz[x]);
for(register int i = h[x], v; i; i = e[i].nxt)
{
v = e[i].to;
if (v == fa) continue;
dfs1(v, x);
}
s.erase(n - siz[x]);
} void dfs2(int x, int fa)
{
for(register int i = h[x], v; i; i = e[i].nxt)
{
v = e[i].to;
if (v == fa) continue;
calc(v), dfs2(v, x);
}
s.insert(siz[x]);
} int main()
{
freopen("chilli.in", "r", stdin);
freopen("chilli.out", "w", stdout);
scanf("%d", &n);
for(register int i = 1, x, y; i < n; i++) scanf("%d%d", &x, &y), add(x, y), add(y, x);
ans = 0x3f3f3f3f, dfs(1, 0), dfs1(1, 0), s.clear(), dfs2(1, 0);
printf("%d", ans);
}

JZOJ 【2020.11.30提高组模拟】剪辣椒(chilli)的更多相关文章

  1. 【2020.11.30提高组模拟】剪辣椒(chilli)

    剪辣椒(chilli) 题目描述 在花园里劳累了一上午之后,你决定用自己种的干辣椒奖励自己. 你有n个辣椒,这些辣椒用n-1条绳子连接在一起,任意两个辣椒通过用若干个绳子相连,即形成一棵树. 你决定分 ...

  2. 【2020.11.30提高组模拟】删边(delete)

    删边(delete) 题目 题目描述 给你一棵n个结点的树,每个结点有一个权值,删除一条边的费用为该边连接的两个子树中结点权值最大值之和.现要删除树中的所有边,删除边的顺序可以任意设定,请计算出所有方 ...

  3. 【2020.11.28提高组模拟】T1染色(color)

    [2020.11.28提高组模拟]T1染色(color) 题目 题目描述 给定 \(n\),你现在需要给整数 \(1\) 到 \(n\) 进行染色,使得对于所有的 \(1\leq i<j\leq ...

  4. 【2020.11.28提高组模拟】T2 序列(array)

    序列(array) 题目描述 ​给定一个长为 \(m\) 的序列 \(a\). 有一个长为 \(m\) 的序列 \(b\),需满足 \(0\leq b_i \leq n\),\(\sum_{i=1}^ ...

  5. JZOJ 5185. 【NOIP2017提高组模拟6.30】tty's sequence

    5185. [NOIP2017提高组模拟6.30]tty's sequence (Standard IO) Time Limits: 1000 ms  Memory Limits: 262144 KB ...

  6. JZOJ 5184. 【NOIP2017提高组模拟6.29】Gift

    5184. [NOIP2017提高组模拟6.29]Gift (Standard IO) Time Limits: 1000 ms  Memory Limits: 262144 KB  Detailed ...

  7. JZOJ 5197. 【NOIP2017提高组模拟7.3】C

    5197. [NOIP2017提高组模拟7.3]C Time Limits: 1000 ms  Memory Limits: 262144 KB  Detailed Limits   Goto Pro ...

  8. JZOJ 5196. 【NOIP2017提高组模拟7.3】B

    5196. [NOIP2017提高组模拟7.3]B Time Limits: 1000 ms  Memory Limits: 262144 KB  Detailed Limits   Goto Pro ...

  9. JZOJ 5195. 【NOIP2017提高组模拟7.3】A

    5195. [NOIP2017提高组模拟7.3]A Time Limits: 1000 ms  Memory Limits: 262144 KB  Detailed Limits   Goto Pro ...

  10. 【2020.12.03提高组模拟】A组反思

    估计:40+10+0+0=50 实际:40+10+0+0=50 rank40 T1 赛时看到\(n,m\leq9\),我当机立断决定打表,暴力打了几个点之后发现在\(n\ne m\)且\(k\ne0\ ...

随机推荐

  1. 一图看懂Hadoop中的MapReduce与Spark的区别:从单机数据系统到分布式数据系统经历了哪些?

    今日博主思考了一个问题:Hadoop中的MapReduce与Spark他们之间到底有什么关系? 直到我看到了下面这张图 废话不多说先上图 我们知道,单机数据系统,在本地主机上针对数据有单机本地存储操作 ...

  2. 预编译SQL为什么能够防止SQL注入

    前言 之前我一个搞网络安全的朋友问了我一个的问题,为啥用 PreparedStatement 预编译的 SQL 就不会有被 SQL 注入的风险? 第一时间我联想到的是八股文中关于 Mybatis 的脚 ...

  3. 【开源库推荐】#4 Poi-办公文档处理库

    原文:[开源库推荐] #4 Poi-办公文档处理库 - Stars-One的杂货小窝 github仓库apache/poi Apache POI是Apache软件基金会的开放源码函式库,POI提供AP ...

  4. 跟我学Python图像处理丨带你入门OpenGL

    摘要:介绍Python和OpenGL的入门知识,包括安装.语法.基本图形绘制等. 本文分享自华为云社区<[Python图像处理] 二十七.OpenGL入门及绘制基本图形(一)>,作者:ea ...

  5. 同步与异步 multiprocessing 进程对象多种方法

    目录 同步与异步 阻塞与非阻塞 综合使用 创建进程的多种方式 前言 windows系统创建进程的问题(重要) multiprocessing模块之Process 展现异步 创建进程的方式(一):使用P ...

  6. 玩转 Go 生态|Hertz WebSocket 扩展简析

    WebSocket 是一种可以在单个 TCP 连接上进行全双工通信,位于 OSI 模型的应用层.WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据.在 W ...

  7. python解释器下载与基本使用

    python介绍与解释器下载基本使用 1.python发展方向 ​ web方向.自动化运维.自动化测试.自动化办公.网络爬虫.金融量化.人工智能.机器学习.数据分析 2.python解释器 ​ 历史 ...

  8. 直播报名|资深云原生架构师分享服务网格在腾讯 IT 业务的落地实践

    云原生在近几年的发展越来越火热,作为云上最佳实践而生的设计理念,也有了越来越多的实践案例,而一个个云原生案例的背后,是无声的巨大变革. 腾讯云主办首个云原生百科知识直播节目--<云原生正发声&g ...

  9. Python二维码扫描

    原文链接:https://blog.easyctf.cn/Moxin/59365.html 模块准备 1.pyzbar pip install pyzbar 2.PIL 注意:PIL只支持Python ...

  10. [机器学习] Yellowbrick使用笔记2-模型选择

    在本教程中,我们将查看各种Scikit Learn模型的分数,并使用Yellowbrick的可视化诊断工具对它们进行比较,以便为我们的数据选择最佳的模型. 代码下载 文章目录 1 使用说明 1.1 模 ...