首页 > 其他分享 >【题解】Solution Set - 杂题选讲「刘君实」

【题解】Solution Set - 杂题选讲「刘君实」

时间:2024-07-25 20:55:48浏览次数:9  
标签:lfloor Set 刘君实 子树内 题解 子树 right siz left

https://www.becoder.com.cn/contest/5423

「HNOI2012」集合选数

感觉差不多会。


7/25 sh 杂题听课情况

  • NOI2018 冒泡排序【40】几乎不会

  • 麦田里的守望者【40】打表找规律、最后 dp 不太理解

  • 星空列车【40】完全不会

  • Were You Last:知道怎么做,但是不知道为什么是对的

  • AGC040E Prefix Suffix Addition:dp 不太理解

  • 冒泡排序 完全没会


灯光展演

首先我们注意到一件事情:染的颜色数量并不是越多越好,最多为 \(c=\min\left(m,\left\lfloor\dfrac n2\right\rfloor\right)\)。

因为是树上的联通块,考虑将一个连通块的贡献分摊到边上。

接下来考虑先随便选一个根 \(u\),对于她的每一条连边 \((u,v)\),其有一次贡献等价于:存在一对点 \((x,y)\),\(x\) 在 \(v\) 的子树内,\(y\) 在 \(u\) 的除 \(v\)​​ 外的子树内。

显然,最优的情况下,每个子树内的颜色互不相同且都有匹配。

如果构造题答案存在上界,考虑构造一种方案正好取到这个上界。

Motivation1: 要使这样的点对尽量的多,感性的理解一下,应该要让每一个子树大小平均,因而想到用树的重心作为根节点。

Motivation2: 子树大小小于 \(c\) 且需要颜色不同,不妨直接按 dfs 序来染色。

可以证明这个方案最优,且取到答案上界。

证明如下:

设 \(v\) 是 \(u\) 子树大小最大的一个子儿子。

  • 如果 \(siz_v\ge c\):

    由重心的性质,\(siz_v\le\left\lfloor\dfrac n2\right\rfloor\),那么子树外的大小之和(包括根) \(\ge \left\lfloor\dfrac n2\right\rfloor\),所以 \(v\) 子树内的所有的点(强于颜色)都能被匹配到。

    同时,由于 \(v\) 子树已经包括了所有的颜色,那么对于每一个其她的子树中的颜色就一定能在 \(v\) 子树中找到匹配。

  • 如果 \(siz_v <c\):

    由于我们是按照 dfs 序染的色,意一个点 dfn 序为 \(i\),dfn 序为 \(i\pm c\),的点如果存在,则其颜色一定与 \(i\) 相同,且不在 \(v\) 子树内(因为 \(v\) 子树还没到 \(c\) 那么大)。

    同时由重心的性质,\(siz_v\le\left\lfloor\dfrac n2\right\rfloor\),那么子树外的大小之和(包括根) \(\ge \left\lfloor\dfrac n2\right\rfloor\),点 \(i\pm c\) 至少存在其一。

    对于其她子树,其大小一定 \(\le siz_v< c\),那么同理可证得。


标签:lfloor,Set,刘君实,子树内,题解,子树,right,siz,left
From: https://www.cnblogs.com/CloudWings/p/18324122

相关文章

  • List<T> HashSet<T> ConcurrentBag<T> 通常会在什么场景下使用 性能对比 .container
    List<T>,HashSet<T>,和ConcurrentBag<T>是.NET中常用的集合类型,它们在不同的场景下各有优势。下面我们来详细介绍它们的使用场景、性能比较以及.Contains()方法的性能。ListList<T>是一个动态数组,提供了顺序访问和按索引访问的能力。使用场景:需要维护元素的顺序。......
  • locust 中HttpUser和TaskSet是什么关系
    在Locust中,HttpUser和TaskSet是用来定义用户行为和任务集合的重要组件。HttpUser:HttpUser是一个类,它代表了一个模拟的用户,可以用来模拟HTTP请求。HttpUser可以指定一些属性,比如最小等待时间和最大等待时间(min_wait和max_wait),这些属性控制了两个连续任务之间的随......
  • python运行报警告:Cython directive 'language_level' not set, using '3str' for now
    相关:https://stackoverflow.com/questions/34603628/how-to-specify-python-3-source-in-cythons-setup-pycython的setup.py文件内容:fromdistutils.coreimportsetupfromCython.Buildimportcythonizesetup(name='GreatCirclemodulev1',ext_modu......
  • CF467E 题解
    题面给出这种限制,我们只能4个4个考虑。令\(f_i\)为考虑到\(a_i\),最长的\(b\)序列长\(4f_i\)。令\(mx_i\)为以\(a_i\)结尾的最短连续子序列包含\(x\y\x\y\)的(不一定连续的)结构的左端点。于是有\(f_i=\max_{j=1}^{mx_i-1}f_j+4\)。用前缀和优化:\(g_i=\max......
  • CF594A 题解
    题面来个不一样的证明。根据样例,我们可以有一个直觉:两点之间一定距离\(\fracn2\),答案为这样的点对之间\(\Deltax\)的最小值。直接交上去,发现这是对的。为什么呢?先证明上界:先手可以让答案小于等于两点距离\(\fracn2\)点对的\(\Deltax\)的最小值。这是容易的:先手只......
  • 题解:Codeforces Round 961 (Div. 2) B1&B2
    本题含有B1和B2两个难度版本。由于关系相近,我把他们放在同一篇博客中,可自行选择观看B1.Bouquet(EasyVersion)timelimitpertest:1.5secondsmemorylimitpertest:512megabytesinput:standardinputoutput:standardoutputThisistheeasyversionoftheprobl......
  • CF568C New Language 题解
    Description将\(\texttt{a}\sim\texttt{a}+l-1\)这\(l\)个字符分成\(\texttt{V,C}\)两个集合。你需要构造一个长度为\(n\)且满足\(m\)个限制且不小于另一个长度为\(n\)的字符串\(s\)的最小字符串。每一个限制为若字符串的第\(p_1\)个位置上的字符\(\in......
  • CF22E 题解
    题面注意到题目给的图为基环树森林。因为一个(\(n>1\))的强连通图每个点都要有出度和入度,所以:对于每个基环树,叶子结点是没有入度的,所以一定要有一条从环上出发的路径经过这个点。对于基环树的环,注意到它缩点后没有出度,所以一定要有一条出边。注意到叶子结点的需求和根节点相反,......
  • 题解:AT_arc116_e [ARC116E] Spread of Information
    题目链接思路看到最大值最小首先可以想到二分,发现答案具有单调性,那么思考如何在\(O(n)\)的时间内判断是否合法。考虑贪心,在最远没覆盖的点的距离和要判断的\(mid\)刚好相等的时侯再选择一定不劣,因为这样覆盖的点最多,那么从叶子节点向上回溯,处理它的所有儿子,判断是否选择该......
  • LG3107 [USACO14OPEN] Odometer S 题解 (数位DP+容斥)
    题意定义一个数是神奇的当且仅当这个数中有一个数位出现了一半及以上,比如112,2233。求\([l,r]\)中有多少个好的数字,\(100\lel,r\le10^{18}\)。题解考虑数位DP,先把答案转为\(Ans(r)-Ans(l-1)\),我们钦定一个数\(k\)让他必须出现多于一半,然后我们想求\([1,x]\)中有多少......