题目链接: [JOI 2019 Final]独特的城市 对于每个点,它的答案最大就是与它距离最远的点的距离. 而如果与它距离为$x$的点有大于等于两个,那么与它距离小于等于$x$的点都不会被计入答案. 所以我们需要找到对于每个点$u$距离它最远的点及最小的距离$x$满足距离$u$的距离大于等于$x$的点都只有一个. 那么怎么找距离每个点最远的点? 这个点自然就是树的直径的一个端点了! 我们将树的直径先找到,然后讨论一下对于每个点,有哪些点可能会被计入答案: 如图所示,我们以点$x$为例,假设它距…
题面 解析 首先有一个结论, 对一个点\(x\)有贡献的城市 肯定在它到离它较远的直径的端点的链上. 假设离它较远的端点是\(S\), 如果有一个点\(u\)不在\(x\)到\(S\)的链上, 却对\(x\)有贡献, 那就说明\(x\)到\(u\)的距离比\(x\)到\(S\)要长, 但根据直径的定义,这是不可能的. 接下来就要考虑怎么算答案了. 首先找出直径的两个端点, 分别作为根统计一次. 维护一个栈,栈里面是可能对\(x\)有贡献的点. 然后考虑长链剖分,求出长链和次长链. 那么对于重儿子…
传送门 官方题解其实讲的挺清楚了,就是锅有点多-- 一些有启发性的部分分 L=N 一个经典(反正我是不会)的容斥:最后的答案=对于每个点能够以它作为集合点的方案数-对于每条边能够以其两个端点作为集合点的方案数.原因是:对于每一种合法方案,集合点一定是树上的一个连通块,满足\(n=m+1\).算点时,这种方案被算了\(n\)次:算边时,这种方案被算了\(m=n-1\)次,所以每一个方案都恰好被算了一次. 有\(DP\):设\(f_i-1\)表示选择了包含\(i\)和\(i\)的子树中的点的一个连通…
传送门 代码: 长链剖分好题. 题意:给你一棵树,问树上选三个互不相同的节点,使得这个三个点两两之间距离相等的方案数. 思路: 先考虑dpdpdp. fi,jf_{i,j}fi,j​表示iii子树中离iii距离为jjj的点数,gi,jg_{i,j}gi,j​表示iii子树中所有满足dist(lca(u,v),i)−dist(lca(u,v),i)=jdist(lca(u,v),i)-dist(lca(u,v),i)=jdist(lca(u,v),i)−dist(lca(u,v),i)=j的点对数…
传送门 长链剖分模板题. 题意:给出一棵树,设fi,jf_{i,j}fi,j​表示iii的子树中距离点iii距离为jjj的点的个数,现在对于每个点iii要求出使得fif_ifi​取得最大值的那个jjj. 思路:有一个明显的状态转移式fi,j=∑v∈sonifv,j−1f_{i,j}=\sum_{v\in son_i}f_{v,j-1}fi,j​=∑v∈soni​​fv,j−1​,那么考虑对这棵树长链剖分,对于链上的信息用指针实现O(1)O(1)O(1)转移,而链与链之间的转移直接暴力转就行,因为…
传送门 长链剖分模板题. 题意简述:允许O(nlogn)O(nlog_n)O(nlogn​)预处理,让你支持O(1)O(1)O(1)查找任意一个点的kkk级祖先. 思路:因为要O(1)O(1)O(1)求,因此需要用到长链剖分的一些性质. 所谓长链剖分是类比重链剖分的一种划分树的方式,我们考虑将整棵树用若干条极长链拼接起来就是长链剖分. 那么它有如下几个几个性质: 所有长链的长度之和为O(n)O(n)O(n) 一个节点的kkk级祖先所在的长链的长度至少为kkk 可以根据长链剖分的定义想 然后这题就…
LOJ#3014. 「JOI 2019 Final」独特的城市(长链剖分) 显然我们画一条直径,容易发现被统计的只可能是直径某个距离较远的端点到这个点的路径上的值 用一个栈统计可以被统计的点,然后我们把这棵树长链剖分,每次在所有轻儿子中找深度最大的,去掉距离u小于这个深度的栈里的点,然后去计算u的重儿子 然后去掉距离u小于重儿子深度栈里的点,但是要再把u加进去,再遍历u的其他儿子 最后重新去掉u,计算答案,用直径两端当根都做一遍,取深度较大的那个 统计的话直接在外面开一个数组,弹出弹入的时候判断…
loj 我本来是直接口胡了一个意思一样的做法的,但是因为觉得有点假+实现要用并查集(?)就卡了好一会儿... 对于一个点\(x\)来说,独特的点一定在它的最长链上,如果有独特的点不在最长链上,那么最长链上一定有和他到\(x\)距离相同的点,矛盾 然后对于一个点,最长链端点一定可以是直径的两端点之一,所以如果我们分别以树的直径的两端点为根进行dfs,那么一个点在其中一次dfs中,独特的点都会在到根的路径上,所以我们用栈维护到根的点,然后不同颜色数开桶来维护,每次压栈或弹栈时改变桶内元素个数,然后根…
JOI 2019 Final 合集 #3010. 「JOI 2019 Final」勇者比太郎 其实如果读懂题了就是水题了 题目就是让你求满足条件的\(JOI​\),使得\(O​\)在\(J​\)同行的右侧,\(I​\)在\(J​\)同列的左侧. 弄个前缀和什么的就好了啊.... #3011. 「JOI 2019 Final」画展 这个题是个贪心. 我们发现一定是把画框从大到小排序然后一个一个填最优是吧 而且显然我们选取的画一定是按照权值排序后的子序列. 这就随便贪一贪就好了,附上代码链接:代码…
传送门 长链剖分好题. 题意简述:给一棵树,问边数在[L,R][L,R][L,R]之间的路径权值和与边数之比的最大值. 思路: 用脚指头想都知道要01分数规划. 考虑怎么checkcheckcheck. 发现就是求在转化成真·边权之后有没有长度在[L,R][L,R][L,R]之间的路径权值是大于0的. 然后可以设计状态fi,jf_{i,j}fi,j​表示iii开头长度为jjj的路径最大值,这个可以用长链剖分优化转移. 然后考虑怎么把经过iii的两条路径拼起来更新答案,这个可以用线段树优化转移,然…