A.给定一个有向图,每次将一条边方向反转,问这个操作是否改变了图中的强连通分量数
考虑翻转后发生改变的情况
对于一条边 ((a_i,b_i))
1.删掉 ((a_i,b_i)) 之后a还能到b但是b不能到a,答案+1
2.删掉 ((a_i,b_i)) 之后a不能到b但是b还能到a,答案-1
所以我们需要的就是删掉某一条边(x,y)之后x能不能到y以及y能不能到x
y能不能到x很好处理可以直接反向 (dfs),因为 ((x,y)) 对这个情况没有影响
考虑x能否到y
考虑x连出了好多条边,那么要走到一个点这些边一定只使用一条
那么我们把所有连出的点一个一个在之前基础上 (dfs),保证不经过其他连出去的点就行了
B.给定一张无向图,求每条边 ((u,v)) 去掉之后 (u) 到 (v) 的最短路
对每个点求最短路树,那么我们只需要考虑树边被割掉的情况
这时我们需要对一个子树重新跑最短路,这样复杂度以及上边求最短路树的复杂度都不太行
然而由于边权都为1,我们可以优化最短路的过程
我们知道最短路的不同权值只有 (n) 种,考虑开 (n) 个队列依次扫一遍,这样最短路的复杂度就是 (O(m)) 的了
所以总复杂度 (O(nm))
C.矩阵变换
稳定婚姻问题的板子?
先说稳定婚姻问题
有n个男生和n个女生,男女生每个人都有一个自己喜欢异性的顺序,求稳定关系,即不存在两队关系(a,b)(c,d)使得a更喜欢d且d更喜欢a
迭代一下
每轮让所有还没有配对的男生向他最喜欢的没有表白过的女生表白
而女生考虑所有向她表白的男生,若里面她最喜欢的那个比现在的更喜欢就把现在的踢掉并选上新的
最多n轮之后就可以得到答案
考虑当前题,我们把所有行看做男生,数字看做女生
男生对女生的喜欢程度是在数当前行的出现先后顺序
女生对男生的喜欢程度是出现越晚的行越喜欢
这样跑完稳定婚姻就发现不会有冲突了
D.[JSOI2018]绝地反击
这玩意一看就可以二分
考虑二分之后该怎么 (check)
发现二分之后所有点可以移动到圆上的一段弧中,且如果有合法情况其中之一一定至少有一个点在区间端点上
这样我们枚举固定的点,接下来就变成了n个点分别放到n个区间里是否有合法方案
然后如果暴力网络流复杂度太高,怎么看都过不了
考虑变换初始点会发生什么
我们把所有可以作为初始点的位置投影到 ([0,frac{2pi}{n}]) 排序考虑,即考虑起点
发现每更换一次起点,不能变得能匹配的顶点不超过1个,能变得不能匹配的顶点不超过1个
直接暴力退流就行了
E.
显然的我们可以一直删除直到树上没有黑色叶子
剩下这棵树显然的一条边最多走两遍
考虑先把每一条边走两遍然后剩下白点用原地走改变颜色来得到初始答案
然后我们发现只需要走一遍的就是起点到终点的路径,而且由于这条路径上的状态要取反我们需要撤销一些操作
我们很容易得到如果某个点 (u) 少操作一次后的减少的操作次数 (val_u)
所以我们需要最大化 (dis(u,v)+sumlimits_{iin(u,v)}val_i)
这也是个类似直径的东西,可以直接用求直径的方法来做