集训Day9

又是不想学化学但元气满满的一天呢qwq

今天又有新的故事发生那就是!

bzoj2150

最小流

每个点拆成$a_x$和$a_y$

$S$->$a_x$容量为1

$a_y$->$T$容量为1

$a_x$->$a_y$容量上下界都是1

若点$a$能到达点$b$则$a_y$->$b_x$容量为1

这个图跑最小流就可以了,另外,S到T的最小流就是T到S的最大流

bzoj2238

给出一个N个点M条边的无向带权图,以及Q个询问,每次询问在图中删掉一条边后图的最小生成树。(各询问间独立,每次询问不对之后的询问产生影响,即被删掉的边在下一条询问中依然存在)

首先考虑,不在最小生成树上的边,去掉后都可以选择最小生成树。

然后如果删掉在最小生成树上的边,那么去掉后,原有的树边一定不变,新添加的一定是能够构成一棵树的非树边。

于是先求出最小生成树,然后看每条非树边能够使多少条树边删去后连通。显然是树链上的边。

所以可以使用树链剖分+线段树的方法实现:使一条链上所有边权值对某值取min、查询某条边的权值。此时需要把边权放到深度更大的那个端点的点权

bzoj1093

一个有向图G=(V,E)称为半连通的(Semi-Connected),如果满足:对于u,v∈V,满足u→v或v→u,即对于图中任意两点u,v,存在一条u到v的有向路径或者从v到u的有向路径。若G'=(V',E')满足V'是V的自己,E'是E中所有跟V'有关的边,则称G'是G的一个导出子图。若G'是G的导出子图,且G'半连通,则称G'为G的半连通子图。若G'是G所有半连通子图中包含节点数最多的,则称G'是G的最大半连通子图。给定一个有向图G,请求出G的最大半连通子图拥有的节点数K,以及不同的最大半连通子图的数目C。由于C可能比较大,仅要求输出C对X的余数。

如果原图是DAG则找最长链,不是DAG就Tarjan变成DAG找最长链

原文地址:https://www.cnblogs.com/Kong-Ruo/p/9210795.html