图论
T1
题目大意:给定一个n个点m条边的有向图,对于每条边求其翻转后是否SCC个数发生变化(n<=1000,m<=200000)
假设现在考虑一条边(u,v),设去掉这条边后u->v,v->u的状态分别为L,R
1>L=1,R=1 u,v一定在同一个SCC里一定不变
2>L=0,R=0 一定不在也不变
3>L=0,R=1 SCC-1,这种情况直接对于每个点dfs一遍即可
4>L=1,R=0 考虑所有u的出边那么L=1说明前缀和后缀的边至少有一个可以到达v的路径,直接dfs即可
T2
题目大意:给定一个n个点m条边的有向图,边权都为1,求出每条边(u,v)被删掉后u到v的最短路(n<=1000,m<=100000)
首先枚举根S之后bfs求出最短路树
假如删去(S,T)
那么在树上T的子树的最短路才会受到影响
这些点的最短路都可以由外界点更新出一个初始值
之后内部更新直接跑DJ/SPFA多个log不是很能过
因为权值只有1,所以最短路的距离不超过n
考虑维护n个队列,每个队列i存储dis=i的所有点
模拟DJ的过程便可以去掉log
T3
小凸和小方是好朋友,小方给了小凸一个 n×m(n≤m)的矩阵 A,并且要求小凸从矩阵中选出 n 个数,其中任意两个数都不能在同一行或者同一列。
现在小凸想知道,选出的 n 个数中第 k 大的数的最小值是多少。
把选(i,j)转化为i->n+j连一条边
那么问题转化为匹配问题
二分答案后跑最大流即可
T4
首先有个神仙建图:
对于每张牌,反面颜色->正面
那么一个方案合法则意味着每个点的入度小于等于1
对于每个联通块分别考虑,设某个联通块点数为V,边数为E
1>V<E 显然一定有一个点入度大于1
2>V=E-1树形dp一下得出每个点为根的最小翻转数
3>V=E是个基环树,环上两种方向考虑一下,外向树上都是确定的