Description A 联邦国有 N 个州,每个州内部都有一个网络系统,有若干条网络线路,连接各个 州内部的城市. 由于 A 国的州与州之间的关系不是太好,每个州都只有首府建立了到别的州的网络.具体来说,每个州的首府都只主动地建立了一条网络线路,连接到距离最近的州的 首府.(欧氏距离.如果有多个,选择标号最小的去连接) B 国探知了 A 国的网络线路分布情况,以及攻陷每条网络线路所需花费的代价,B 国首脑想知道断开 A 国某两个城市之间的网络连接,所需的最少代价.请你计算出来告 诉他. 注:…
题解: 好题!! 这题似乎能上我代码长度记录的前五? 调试时间长度应该也能上前五QAQ 首先题目要求的明显就是最小割,当然在整个森林上求Q次最小割肯定是会GG的,所以我们需要一个能快速求最小割的算法——最小割树. 最小割树,也叫分治最小割,就是通过预处理把原本的图缩成一颗树,树上两个节点路径上的最小边权就是它们的最小割,这个用树上倍增可以随便维护. 大概思想就是先求一次最小割,把划分出的S和T两个点集继续求最小割,向下分治然后连边缩点. 这题先对每个州预处理最小割树,州和州之间用KD树求出距离最…
题解: 好题!我的结论很接近正解了... 把一个数化成二进制,每次至少要拿走一位,最多全拿走,不能不拿.那么这就是一个经典的Nim问题了,子树异或起来就是根节点的答案,随便递推一下就行了. 代码: #include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #include<cmath> #include<queue> #define inf 21…
题解: 神题...我看到的时候直接吓懵了... 这是一道STL题...否则可能要写可持久化ETT或者可持久化Toptree? 用bitset来维护每个蘑菇上哪里有杂草,那么 对于操作1和操作2:可以预处理每个点为跟的bitset: 对于操作3和操作4:预处理两个点到根这条链上的bitset,先异或再或两个点的lca的bitset: 对于操作5和操作6:直接暴力区间清零即可: 询问直接贪心,由于随机所以复杂度O(玄学)(实际上应该是$O(\frac{n}{32}+\frac{n}{ln200})$…
北京集训的题都是好题啊~~(于是我爆0了) 注意到一个重要的性质就是期望是线性的,也就是说每一段的期望步数可以直接加起来,那么dp求出每一段的期望就行了... 设$f_i$表示从$i$出发不回到$i$直接到达终点的概率,显然期望步数就是$\frac{1}{f_i}$: 考虑转移,设下一个事件概率为$p$,则 如果下一个事件是敌人:$f_i=f_{i+1}*p$ 如果下一个事件是旗子: $f_{i}=(1-p)*(1-f_{i+1})*(1+p*(1-f_{i+1})+p^{2}*(1-f_{i+…
Solution 最小割. 参考BZOJ 3144切糕 在那道题的基础上将建图方法稍作变形: 我们对格子进行黑白染色, 对于两个格子之和\(\le k\)的限制, 就可以确定其中一个是白色格子, 一个是黑色格子. 我们让黑色格子和白色格子的点的顺序相反, 就可以表示限制了. 目前的代码还是WA的. #include <cstdio> #include <cctype> #include <vector> #include <deque> #include &…
由Hall定理,任意k种减肥药对应的药材数量>=k.考虑如何限制其恰好为k,可以将其看作是使对应的药材数量尽量少. 考虑最小割.建一个二分图,左边的点表示减肥药,右边的点表示药材.减肥药和其使用的药材连inf边,这里的inf边较大,可以取到1e18:源向减肥药连inf-pi的边,表示不选这种减肥药会损失pi,这里的inf边较小,可以取到1e9:药材向汇连1e9的inf边,用来限制药材数量.容易发现最后的最小割中至少会割掉n条边,且割掉的边越少越优,而当恰好割掉n条边时,就对应了一种减肥药与药材数…
Problem 树上倍增 题目大意 给出一个图,给出若干个点对u,v,求u,v的一条路径,该路径上最小的边权值最大. Solution 看到这个题第一反应是图论.. 然而,任意路径最小的边权值最大,如果仔细思考的话就会知道,如果两个点相互连通,那么一定走的是最大生成树上的路径,而不会选择其他任何一条路径去走. 这个是可以非常简单证明的,就不再详述. 那么既然知道了这个,当然是先建一颗最大生成树啦! 现在问题来了,Prim&Kruskal,选哪个? 分析一下,prim复杂度$O(n^2)$,n为总…
Portal --> broken qwq Description 一开始有个蘑菇,蘑菇里面有\(n\)个房间,是一棵有根树,\(1\)号是根,每个房间里面都有杂草,现在要支持以下操作:将某个指定蘑菇复制一份作为一个新的蘑菇:将蘑菇\(v\)合并到蘑菇\(u\)中,有杂草的房间取并(合并后\(v\)不会消失):某个蘑菇子树除草/除子树外除草:某个蘑菇路径除草/除路径外除草:某个蘑菇标号为\(l\sim r\)房间除草/除了这些房间外除草:查询清除某个蘑菇上面所有杂草的时间:一单位时间内可以除最多…