首页 > 其他分享 >Ucup2 -19题解

Ucup2 -19题解

时间:2024-02-09 22:55:17浏览次数:38  
标签:定义 对于 19 题解 Ucup2 节点 叶子 我们

Ucup2 -19题解:

​ 这场的题还是挺有意思的,之前回家后因为过年的准备+美赛摆了挺久没训练,现在开始复健,顺便复活一下死去已久的博客。

​ 水题就不赘述了,这次主要说说几道比较难的但思路很有趣的题目,顺序就按难度排吧。

G. LCA Counting

Problem - G - Codeforces

题意:给定一颗无向的树,1为根,定义f(k)为选择k个叶子后集合S的最大大小,其中S定义为{lca(xi,xj)|xi,xj属于选定的k个叶子},其中xi和xj可相同。令叶子数为w,则需要回答从k:1->w 的 f(k)的值。

1<n<=2e5

题解:从小的情况开始考虑,对于k=1时,显然为1,k=2时为3,k=3时可能为4或5...我们手玩后可以发现以下事实:

1,每次f(k)会较于f(k-1)增加1 or 2

2,对于一个节点其所包含的子树生成树为一颗二叉树的形状

定义这里的生成树为所选集合的点根据祖先关系形成的树。

我们可以发现对于一颗生成树内的叶子操作时每步增加2,而更换生成树时的步增加,所以我们肯定要从大的生成树开始逐渐往小的做,这样肯定是f(k)保证最大的。

现在的问题便是找到每颗生成树以及其大小。令u点生成树大小为s(u)

我们首先找的肯定是以根为根的生成树,其必然最大,我们进一步发现这个问题可以递归,对于点u,其子节点为 vi,当u为叶的时候s(u)=1,当u有1个儿子v时s(u)=s(v),当u有多个儿子时s(u)=s(v1)+s(v2)(假设儿子已经根据s从大往小排过序),并且剩下的v3以及之后的儿子会自己形成新的生成树,我们保存其大小到集合E中即可。

最后我们将s(1)放入E中,对E从大到小排序后即可得到f(k)的值。

具体细节可以看看我的代码Submission #245436634 - Codeforces

C. Yet Another Balanced Coloring Problem

题意:给两棵树,节点数分别为n和m。他们中编号为1-k的点恰好都是叶子节点,现在要对两颗树中的每个叶子染色,编号一样的叶子染一样的色,可以染r or b,并且要求染色后对于每个节点其子树中的 r数量与b数量相差不超过1,问是否有解,若有解给出方案。

2<n,m<=2e5

题解:神奇的解法(当然后面的题多少都带点神奇)。

我们观察发现对于包含偶数个儿子的子树,其子树权值必然为0(定义r 为1 ,b为-1),故其对父亲无影响,我们删除其与父亲的边。之后我们发现对于除了叶子和根外每个点,其度数均为偶数。而两个根必然同奇偶,我们可以把叶子看作连接两个树的连接节点,这样他们也有偶数的度数。现在我们定义边的方向,对于第一个树,若u的值为+1,则u->fa,否则为-1,fa->u,对于第二个树相反。在这种定义下,我们发现除了根以外每个点出度等于入度,而对于根一个出度=入度+1,另一个反之,刚好可以作为欧拉图的起点和终点,我们再定义对于树1的叶子,所有入点为-1,出点为1,在对题进行如此转化后,只需对图遍历1次即可得到方案,且正确性显然。

Problem D. Filesystem

题意:给定排列1,2,..n和p,定义一些元素为used为需上传恰1次,其他元素不可上传,每次操作定义为在两个排列中选1个并选择连续的一些点上传。问最少操作次数。

n<=1e3

题解:网络流。

我们定义在1 ,2,---n中被上传定义为染b,在p中上传为染r。

那么我们其实就是想要得到一系列染色段,同一段为同色,代价即为段数。

考虑一个经典的做法,将图中的点拆点,分别于源点汇点相连(iINF=1e8),并且两两相连(INF 不可断),我们定义在对图进行割后属于S的联通块为r,否则为b。那么我们考虑如何连边加入我们的代价,我们考虑代价会在何时产生:

1,在序列1中i选择b而i+1选择r,

2,在序列2中pi选r而pi+1选b

故我们只需从pi向_pi+1连代价为1的边,从i+1向i连代价为1的边,再通过最小割同时减去由于对源汇点相连边的代价即可。

H. Minimum Cost Flow²

题意:见Problem - H - Codeforces,有空了翻

题解:首先需要观察出一个结论:对于一个环,其代价之和(常规意义下非平方代价)为0。

证明见官方题解(公式太多懒得打了):image

我们考虑最后的最优解一定是存在的且可以表示为一个对于每条边的流量的向量形势,我们考虑如何得到它:通过解方程组!

根据最开始的式子我们已经得到了n-1个方程,而我们有m个变量,所以需要利用上述结论找到剩下的方程,故我们只需找m-(n-1)个方程即可,即我们找到m-(n-1)个环即可。

这很难不联想到生成树,我们建立一颗生成树,对于每条1非树边,我们选定其与树边组成一个基本环,共m-n+1个环。从而我们得到了m个方程,可以解出答案了!

对于做题来说可能已经够了,但对于写题解我们还需要进一步讨论:为什么这样可以满足最优条件对于每一个环代价和都为0。

我们找到任意一个环,我们令边在生成树中的边为C1,其他为C2,那么我们可以通过与基本环+ or -运算消除所有非树边,得到空集or在树上来回行走的环,必然为0,故此解是满足最优条件的,至于解的唯一性,出题人告诉我们最好的答案就是放手一搏!()

image

暂时懒得看了,读者有兴趣可以自行前往官解查看(巨长)。

F. When Anton Saw This Task He Reacted With

标签:定义,对于,19,题解,Ucup2,节点,叶子,我们
From: https://www.cnblogs.com/wjhqwq/p/18012672

相关文章

  • AtCoder ABC 263 D 题解
    AtCoderABC263D题解前言本蒟蒻的第一篇题解,大佬勿喷QwQ传送门们洛谷传送门AtCoder传送门正文设有\(x\)使得\(x\leqk\)时,令\(f(k)\)为对\(A'\)进行运算后\(A'=(A_1,A_2,\ldots,A_k)\)的最小和。同理,对于\(y\)使得\(y\leqk\)时,令\(g(k)\)为对\(A......
  • 新年欢乐赛题解
    cyh巨佬举办的比赛。比赛页面赛后补题官方题解赛时没时间写题,赛后补一下。T1:默认排名第一,对于每次输入,若输入的成绩更优,则将排名降低。这里更劣的成绩没用,因为默认初始排名第一。T2:At上的一道原题。考虑DP求解。\(dp_{i,0/1}\)分别表示到第\(i\)张翻和不翻的总......
  • P9170 [省选联考 2023] 填数游戏 题解
    Description众所周知,Alice和Bob是一对好朋友。今天,他们约好一起玩游戏。一开始,他们各自有一张空白的纸条。接下来,他们会在纸条上依次写\(n\)个\([1,m]\)范围内的正整数。等Alice写完,Bob在看到Alice写的纸条之后开始写他的纸条。Alice需要保证她写下的第\(i\)个......
  • P9478 [NOI2023] 方格染色题解
    题解对于行操作,列操作和对角线操作,实际上仅仅只是在对若干个矩形求面积并而已,这是裸的扫描线题,套用模板即可,此时注意到对角线操作实际上是\(O(n)\)量级的矩阵面积并,因此复杂度是\(O(n\logq+q\logq)\)的量级,只能获得95pts。显然,面积并具有交换性,我们先做\(O(q\logq)\)......
  • uoj839 龙门题字 题解
    题目链接点击打开链接题目解法呜呜呜,我考场上只会\(60\),不会优化,没救了要求字典序最大,不难想到一位一位钦定,那么我们现在的问题是判断\(ans_1,...,ans_i\)是否合法,记\(ok_{i,j}\)表示第\(i\)个修改在第\(j\)位是否可行(即\(x_{i,j}\geans_j\)),同时记\(cnt_i\)为第......
  • CodeForces 1927G Paint Charges
    洛谷传送门CF传送门看到\(n\le100\)考虑\(O(\text{poly}(n))\)dp。发现从左向右决策,因为一个点可以向左或向右覆盖,所以需要记最靠左的未覆盖的位置\(j\)和最靠右的已覆盖位置\(k\),状态就是\(f_{i,j,k}\),dp最小的覆盖次数。转移的讨论很简单。考虑不覆盖还是向左......
  • 2024大试牛刀5题解
    鼠鼠我鸭没学过前缀和的自己去补一下,这里不过多赘述(其实是我不想写)以第二组数据为例:类型0100体重2565先计算出不使用魔法时鸭鸭的重量,当作基础值\(ori=5\)。然后来看看对一段区间使用魔法会造成什么效果:类型0100体重2565变化a+2-5......
  • ABC338G题解
    也许是一个简单一点的做法?假如我们要求一个表达式的值,我们求的顺序显然是,按照加号划分为若干段,段内只有数字和乘号,计算出段内结果后全部加起来。称一个只有数字和乘号的表达式是基本表达式,我们将每个表达式的贡献拆分为若干个基本表达式之和,那么我们就可以枚举每个基本表达式,算......
  • 文心一言 VS 讯飞星火 VS chatgpt (197)-- 算法导论14.3 5题
    五、用go语言,对区间树T和一个区间i,请修改有关区间树的过程来支持新的操作INTERVALSEARCH-EXACTLY(T,i),它返回一个指向T中结点x的指针,使得x.int.low==i.low且x.int.high==i.high;或者,如果不包含这样的区间时返回T.nil。所有的操作(包括INTERVAL-SEARCH-EXACTLY)......
  • CF516D Drazil and Morning Exercise 题解
    Description给定一棵\(n\)个点的树,边有边权。定义\(f_x=\max_{i=1}^n\text{dist}(x,i)\)。\(q\)次询问最大的满足\(\max_{x\ins}f_x-\min_{x\ins}f_x\lel\)的连通块\(s\)包含的点数。\(n\le10^5\),\(q\le50\)。Solution这里\(f_u\)显然可以用换......