传送门 思路 先考虑两点如何使他们不连通. 显然路径上所有的割点都满足条件. 多个点呢?也是这样的. 于是可以想到圆方树.一个点集的答案就是它的虚树里圆点个数减去点集大小. 可以把点按dfs序排序,然后统计相邻两点距离和首尾两点距离之和. 为了防止一个点被统计多次,把点权改为边权,再额外算上lca是圆点的情况. 另外,写完这题之后P4320就是双倍经验了. 代码 #include<bits/stdc++.h> clock_t t=clock(); namespace my_std{ using…
题目链接 洛谷P4606 双倍经验:弱化版 题解 两点之间必经的点就是圆方树上两点之间的圆点 所以只需建出圆方树 每次询问建出虚树,统计一下虚树边上有多少圆点即可 还要讨论一下经不经过根\(1\)的情况 P4606 #include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #include<cmath> #include<map> #define…
QWQ深受其害 当时在现场是真的绝望...... 现在再重新来看这个题 QWQ 根据题目所说,我们可以发现,对于每一个集合中的节点,我们实际上就是要求两两路径上的割点的数目 考虑到又是关于点双的题目,而且在图上,我们并没有很好的办法去做. 这时候就要考虑建出来圆方树,然后我们对于圆方树 的每个点,维护他到根的路径上的圆点个数 那么,我们该怎么求两两路径的割点总数呢(一看到数据范围,就想到虚树了啊) 冷静分析一下,发现真的直接把虚树中的点弄出来就是合法的,因为两两的路径一定会通过\(lca\),而…
喜闻乐见的圆方树+虚树 图上不好做,先建出圆方树. 然后答案就是没被选到的且至少有两条边可以走到被选中的点的圆点的数量. 语文不好,但结论画画图即可得出. 然后套路建出虚树. 发现在虚树上DP可以得出答案. 所以在虚树上DP即可. 代码极丑 #include<iostream> #include<cstring> #include<cstdio> #include<cmath> #include<algorithm> using namespac…
[BZOJ5329][SDOI2018]战略游戏(圆方树,虚树) 题面 BZOJ 洛谷 Description 省选临近,放飞自我的小Q无心刷题,于是怂恿小C和他一起颓废,玩起了一款战略游戏. 这款战略游戏的地图由n个城市以及m条连接这些城市的双向道路构成,并且从任意一个城市出发总能沿着道路走到 任意其他城市.现在小C已经占领了其中至少两个城市,小Q可以摧毁一个小C没占领的城市,同时摧毁所有连接这 个城市的道路.只要在摧毁这个城市之后能够找到某两个小C占领的城市u和v,使得从u出发沿着道路无论如…
\(\mathcal{Description}\)   Link.   给定一个 \(n\) 个点 \(m\) 条边的无向连通图,\(q\) 次询问,每次给出一个点集 \(s\),求至少在原图中删去多少个点,使得 \(s\) 中存在两点不连通.多组数据.   每组数据 \(n,q\le10^5\),\(m,\sum|s|\le2\times10^5\). \(\mathcal{Solution}\)   看到 \(\sum|s|\) 的限制,不难联想到虚树或者其它与 DFN 相关的算法.   所…
题目链接 题意:给一张无向图和\(M\)个询问,问\(u,v\)之间的路径的必经之点的个数. 对图建出圆方树,然后必经之点就是两点路径经过的原点个数,用\((dep[u]+dep[v]-dep[LCA]*2)/2+1\)即可算出. 什么你不知道圆方树(说的跟我知道一样) \(APIO2018\)出来的黑科技,详见\(APIO2018\)铁人两项. 就是对每个点双新建一个点,然后让点双里所有点都对这个点连边. 看图. #include <cstdio> const int MAXN = 5000…
QWQ神仙题啊(据说是今年第一次出现圆方树的地方) 首先根据题目,我们就是求对于每一个路径\((s,t)\)他的贡献就是两个点之间的点数,但是图上问题我并没有办法很好的解决... 这时候考虑圆方树,我们将圆方树建出来之后, 我们令方点的权值是他所连接的圆点之和,圆点的权值是\(-1\). 这里之所以让圆点的贡献是-1,是为了方便表示路径的贡献(不然貌似比较复杂). 如果我们这么赋值的话,那么一个条路经的贡献就应该是点权之和. QWQ可惜枚举两个端点是\(O(n^2)\)复杂度的 那么这时候,我们…
正题 题目链接:https://www.luogu.com.cn/problem/P4606 题目大意 给出\(n\)个点\(m\)条边的一张图,\(q\)次询问给出一个点集,询问有多少个点割掉后可以是点集中至少一个点对不连通. 解题思路 就是问圆方树上的虚树中的圆点数量,照着统计就好了. 细节有点多,注意不要习惯性的把根节点带进虚树就好了. 时间复杂度\(O(n\log n)\) code #include<cstdio> #include<cstring> #include&l…
P4606 [SDOI2018]战略游戏:广义圆方树 其实会了圆方树就不难,达不到黑,最多算个紫 那个转换到圆方树上以后的处理方法,画画图就能看出来,所以做图论题一定要多画图,并把图画清楚点啊!! 但我怎么从9点一直调到下午4点啊啊啊啊啊 双倍经验:P4320 道路相遇,但是被卡常了并没有过 给出一个无向图,和 \(q\) 个询问,每次给出 \(s\) 个点,问存在几个点,使得这个点和他相连的边被去除后,这 \(s\) 个点中,至少存在一对点互不相通 先用 tarjan 对原图建立圆方树,然后可…