点此看题面

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

贪心

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

我们可以用\(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. 基于Visual Studio .NET2015的单元测试 OpenCover

    https://www.cnblogs.com/XiaoRuLiang/p/10095723.html 基于Visual Studio .NET2015的单元测试 1.    在Visual Stud ...

  2. Java学习笔记day05_方法重载

    1.方法的重载overload 在同一个类中, 允许出现同名的方法, 只要方法的参数列表不同即可. 参数列表不同: 参数个数不同, 参数类型不同, 顺序不同. public class MethodO ...

  3. linux下WordPress安装

    http://www.cnblogs.com/xiaofengkang/ WordPress简介 WordPress 是一种使用 PHP语言和 MySQL数据库开发的开源.免费的Blog(博客,网志) ...

  4. js 获取非行间样式

    1.getComputedStyle(nodeObj,false):该方法是BOM对象,第一个是要获取样式的节点对象:第二个可以写成任何的字符一般写成false或者null,这里最好是用false因为 ...

  5. PS使模糊图片变清晰

    操作步骤 \(文件\)

  6. Cinder Columns

    http://www.screencast.com/users/xiangxinyong/folders/Smaug http://www.screencast.com/t/SLqCyOwtBRl

  7. (转)ssh-keygen 中文手册

    ssh-keygen 中文手册 原文:http://www.jinbuguo.com/openssh/ssh-keygen.html 实例:http://blog.csdn.net/yl_1314/a ...

  8. Python3实现计算BMI指数,跟我一起来计算你的BMI吧

    废话不多说,直接上程序哈: name=input('Name:') height=input('Height(m):') weight=input('Weight(kg):') BMI=float(f ...

  9. 网页URLs

    Extending Python Interpretor: https://docs.python.org/3/extending/index.html Aliyun Mriirors: https: ...

  10. 延迟查询--LINQ

    1.LINQ查询使用的是延迟查询的方法,以便提高效率 public static IEnumerable<TSource> Where<TSource>(this IEnume ...