点此看题面

大致题意: 请你给一棵树黑白染色,使每一个叶结点到根节点的路径上黑节点个数相同。

贪心

显然,按照贪心的思想,我们要让叶结点到根节点的路径上黑节点的个数尽量大。

我们可以用\(Min_i\)来表示在\(i\)的子树中深度最小的叶节点的深度。特殊的,若一个节点\(x\)为叶节点,则\(Min_x=dep_x\)。

那叶结点到根节点的路径上黑节点的最大个数就是\(Min_1\)(显然)。

然后我们考虑把所有节点全部染黑,但这样极有可能不合法。

所以我们要把一些节点染回白色。

按照贪心的思想,我们应该尽可能选择深度小的节点将其染回白色,这样肯定是最优的。

具体实现详见代码。

代码

#include<bits/stdc++.h>
#define Tp template<typename Ty>
#define Ts template<typename Ty,typename... Ar>
#define Reg register
#define RI Reg int
#define Con const
#define CI Con int&
#define I inline
#define W while
#define N 100000
#define INF 1e9
#define add(x,y) (e[++ee].nxt=lnk[x],e[lnk[x]=ee].to=y)
#define Gmin(x,y) (x>(y)&&(x=(y)))
using namespace std;
int n,ee,ans,lnk[N+5],dep[N+5],Min[N+5];struct edge {int to,nxt;}e[N<<1];
class FastIO
{
private:
#define FS 100000
#define tc() (A==B&&(B=(A=FI)+fread(FI,1,FS,stdin),A==B)?EOF:*A++)
#define pc(c) putchar(c)
#define tn(x) (x<<3)+(x<<1)
#define D isdigit(c=tc())
int T,C;char c,*A,*B,FI[FS],FO[FS],S[FS];
public:
I FastIO() {A=B=FI;}
Tp I void read(Ty& x) {x=0;W(!D);W(x=tn(x)+(c&15),D);}
Tp I void write(Ty x) {W(S[++T]=x%10+48,x/=10);W(T) pc(S[T--]);}
Ts I void read(Ty& x,Ar&... y) {read(x),read(y...);}
}F;
void dfs1(CI x,CI lst)//第一遍DFS,求出Min数组
{
for(RI i=(Min[x]=INF,lnk[x]);i;i=e[i].nxt)
e[i].to^lst&&(dep[e[i].to]=dep[x]+1,dfs1(e[i].to,x),Gmin(Min[x],Min[e[i].to]));//遍历子树,求出Min数组
Min[x]==INF&&(Min[x]=dep[x]);//叶节点的Min为自身深度
}
void dfs2(CI x,CI lst,RI v)//第二遍DFS,求出答案
{
Min[x]-Min[1]>v&&(++v,--ans);//如果当前节点需要染成白色,就将其染白,ans减1
for(RI i=lnk[x];i;i=e[i].nxt) e[i].to^lst&&(dfs2(e[i].to,x,v),0);//遍历子树
}
int main()
{
RI i,x,y;for(F.read(n),ans=n,i=1;i^n;++i) F.read(x,y),add(x,y),add(y,x);//连边,初始化将所有节点染黑(无需实际操作),赋ans=n
return dfs1(1,0),dfs2(1,0,0),F.write(ans),0;//两遍DFS,输出答案
}

【UOJ139】【UER #4】被删除的黑白树(贪心)的更多相关文章

  1. 【uoj#139】[UER #4]被删除的黑白树 贪心

    题目描述 给出一个 $n$ 个节点的树,$1$ 号点为根.现要将其中一些点染成黑色,使得每个叶子节点(不包括根节点)到根节点路径上的黑点数相同.求最多能够染多少个黑点. 题解 贪心 显然有结论:选择的 ...

  2. uoj #139. 【UER #4】被删除的黑白树 dfs序 贪心

    #139. [UER #4]被删除的黑白树 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/139 Descript ...

  3. 【UOJ139】【UER #4】被删除的黑白树

    题意: 很久很久以前,有一棵树加入了 UOJ 群. 这天,在它讨论“一棵树应该怎么旋转”的时候一不小心被删除了,变成了被删除的树. 突然间,它突然发现它失去了颜色,变成了一棵纯白的树.这让它感觉很焦躁 ...

  4. uoj139 【UER #4】被删除的黑白树

    题目 不难发现有一个暴力\(dp\) 设\(dp[x][l]\)表示\(x\)点子树内所有叶子节点到\(x\)的路径上都有\(l\)和黑点时最多能染多个黑点 转移就是 \[dp[x][l]=\max( ...

  5. 【BZOJ】3319: 黑白树

    http://www.lydsy.com/JudgeOnline/problem.php?id=3319 题意:给一棵n节点的树(n<=1e6),m个操作(m<=1e6),每次操作有两种: ...

  6. 【BZOJ】3319: 黑白树(并查集+特殊的技巧/-树链剖分+线段树)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3319 以为是模板题就复习了下hld............................. 然后n ...

  7. [BZOJ 3319] 黑白树

    3319: 黑白树 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 557  Solved: 194[Submit][Status][Discuss] ...

  8. CodeM美团点评编程大赛初赛B轮 黑白树【DFS深搜+暴力】

    [编程题] 黑白树 时间限制:1秒 空间限制:32768K 一棵n个点的有根树,1号点为根,相邻的两个节点之间的距离为1.树上每个节点i对应一个值k[i].每个点都有一个颜色,初始的时候所有点都是白色 ...

  9. 【BZOJ3319】黑白树 并查集

    [BZOJ3319]黑白树 Description 给定一棵树,边的颜色为黑或白,初始时全部为白色.维护两个操作:1.查询u到根路径上的第一条黑色边的标号.2.将u到v    路径上的所有边的颜色设为 ...

随机推荐

  1. servlet3

    亿级流量架构 http://www.iteye.com/blogs/subjects/as-core servlet3.1对比 http://jinnianshilongnian.iteye.com/ ...

  2. shell脚本学习(1)

    格式: #!/bin/bash                              :标志一个shell脚本 #Filename:first_shell.sh          :文件名称 #a ...

  3. vim的三种模式

    vim的三种模式(最基本的) 命令模式:在该模式下是不能对文件进行编辑的,可以输入快捷键进行一些操作(删除. 复制.移动光标.粘贴)[打开默认                  是进入命令模式] 编辑 ...

  4. 转 Python-IndexError: list index out of range

    https://www.cnblogs.com/2bjiujiu/p/9063864.html Error:IndexError: list index out of range Where? 对Py ...

  5. TCP Nagle算法以及延迟确认(即延迟回复ACK)的学习

    TCP/IP协议中,无论发送多少数据,总是要在数据前面加上协议头,同时,对方接收到数据,也需要发送ACK表示确认.为了尽可能的利用网络带宽,TCP总是希望尽可能的发送足够大的数据. (一个连TCP接会 ...

  6. python 16 进程和线程

    进程和线程 很多同学都听说过,现代操作系统比如Mac OS X,UNIX,Linux,Windows等,都是支持“多任务”的操作系统. 什么叫“多任务”呢?简单地说,就是操作系统可以同时运行多个任务. ...

  7. POI 按word模版生成合同并生成PDF

    功能需求:根据用户给的word版本合同文件.docx,实现模版替换功能. 如: 功能:支持段落和表格里的文字替换,还可以支持表格替换.如果需要段落需要换行用<br>隔开如:身份证<b ...

  8. Unity Animation.CrossFade Animation.Play

    using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerCo ...

  9. override javascript escape funcation

    var oldescape = window.escape; escape = function (sStr) { return oldescape(sStr).replace(/\+/g, '%2B ...

  10. 手机缺失sqlite3时操作数据库的多种解决方案 ----adb命令科普

    在Android应用开发无处不在SQLite数据库的身影.那么在开发中怎么使用adb命令操作数据库的功能呢? 下面我们将完整的介绍与数据库操作相关的命令集及当手机缺少sqlite3的时候的多种解决方案 ...