摘要:"原题链接" 题意实际上就是让你添加尽量少的边,使得每个点都在至少一个环上。 显然对于在一个边双连通分量里的点已经满足要求,所以可以用$tarjan$找边双并缩点。 对于缩点后的树,先讲下我自己的弱鸡做法,每次找直径,因为将直径改为环显然使得新添的边贡献最大,这样贪心的连下去,直到所有点满足要求为止
阅读全文
摘要:"原题链接" 设某一趟车所停靠的车站的集合为$S = \{a_1,a_2,\dots, a_{k 1}, a_k\}$,那么对于一个车站$\forall x\in (a_1, a_k), \notin S$,向集合$S$中的每一个车站连一条边权为$1$的有向边,表示停靠的车站比未停靠高一级。 最后在
阅读全文
摘要:"BZOJ原题链接" "洛谷原题链接" 在一个强连通分量里的$ATM$机显然都可被抢,所以先用$tarjan$找强连通分量并缩点,在缩点的后的$DAG$上跑最长路,然后扫一遍酒吧记录答案即可。 cpp include using namespace std; const int N = 5e5 +
阅读全文
摘要:"原题链接" 因为在一个强连通分量里,所有间谍互相(直接或间接)都掌握着证据,所以只要有一个间谍被控制,那么这整个强连通分量里的间谍都被控制。 所以我们可以对其进行缩点,并记录该强连通分量里的愿意被收买的间谍所需要最小资金以及编号最小的间谍。 对于缩点后的$DAG$,显然入度为$0$的点必须能被收买
阅读全文
摘要:"BZOJ原题链接" "洛谷原题链接" 显然就是求最小割。 而对于一个平面图有结论,最大流=最小割=对偶图最短路。 所以这题可用最大流或是转换为对偶图求最短路,这里我是用的对偶图。 虽然理论上按上界算,这题$Dinic$应该是跑不过去的,不过因为网络流复杂度玄学,$Dinic$莫名跑得挺快的。 在转
阅读全文
摘要:"原题链接" 这题我是用了个玄学的$dfs$剪枝跑过,如果要看正解状压$DP$,可以移步机房大佬的博客( "传送门" ) 关于剪枝,具体的直接在代码里说吧。 cpp include include include using namespace std; const int N = 20; int
阅读全文
摘要:"原题链接" 要解决这题有一个很重要的思想,就是将跑步的路径拆开来,分成向上走的$S\to LCA(S,T)$,及向下走的$LCA(S,T)\to T$($S$是路径起点,$T$是路径终点)。 然后对于两种路径单独统计贡献。 先只考虑向上走的路径$S\to LCA(S,T)$。 对于一个观测点$i$
阅读全文
摘要:"原题链接" 裸的差分约束。 1. $X_a X_b\geqslant C$ 2. $X_a X_b\leqslant C\Rightarrow X_b X_a\geqslant C$ 3. $X_a X_b\geqslant 0,X_b X_a\geqslant 0$ 并建立一个超级源点$0$,对
阅读全文
摘要:"BZOJ原题链接" "洛谷原题链接" 用$LCA$初始化出所有运输计划的原始时间,因为答案有单调性,所以二分答案,然后考虑检验答案。 很容易想到将所有超出当前二分的答案的运输计划所经过的路径标记,在这些运输计划都经过的边中的权值最大的这条边上建立虫洞,如果能使得所有运输计划中需要时间最多的那个计划
阅读全文
摘要:"原题链接" 显然一个强连通分量里所有草场都可以走到,所以先用$tarjan$找强连通并缩点。 对于缩点后的$DAG$,先复制一张新图出来,然后对于原图中的每条边的终点向新图中该边对应的那条边的起点连一条边,表示逆向走一次,且之后不会再逆向了。 最后在该图上跑$SPFA$求单源最长路即可。 cpp
阅读全文
摘要:"BZOJ原题链接" "洛谷原题链接" 显然在一个强连通分量里的奶牛都可以相互喜欢,所以可以用$tarjan$求强连通并缩点。 要求明星奶牛必须被所有人喜欢,显然缩点后的图必须满足只有一个点没有出度,因为若有两个点没有出度,那么其中一个点所包含的奶牛显然不能喜欢另一个点的奶牛。 而这个唯一的没有出度
阅读全文
摘要:"原题链接" 先随便找一棵最小生成树,然后贪心的从大到小选择边,使其没有贡献。 显然固定生成树最长边的一个端点安装卫星频道后,从大到小选择边的一个端点作为卫星频道即可将该边的贡献去除。 所以最后的答案就是最小生成树上第$m$长的边。 cpp include include include inclu
阅读全文
摘要:"原题链接" 做了挺多强连通分量缩点题,结果模板还晾着。。 $tarjan$找强连通缩点,然后拓扑排序$DP$就好。 cpp include using namespace std; const int N = 1e4 + 10; const int M = 1e5 + 10; struct eg
阅读全文
摘要:"BZOJ原题链接" "洛谷原题链接" 显然在一个点双连通分量里,无论是哪一个挖煤点倒塌,其余挖煤点就可以互相到达,而对于一个点双连通分量来说,与外界的联系全看割点,所以我们先用$tarjan$求出点双连通分量,再对每个点双进行讨论。 1. 若该点双不含割点,那么这个点双是与外面隔绝的,至少要设置两
阅读全文
摘要:"BZOJ原题链接" "洛谷原题链接" 和 Going from u to v or from v to u?( "题解" )这道题类似,只不过是求最大子图的大小和个数而已。 一样用$tarjan$求强连通分量,并进行缩点,然后对于缩点后的$DAG$进行拓扑排序$DP$。 定义$size[i]$表示
阅读全文
摘要:"原题链接" 显然在一个强连通分量里,任意两个点都可以到达,所以我们先用$tarjan$求强连通分量,并进行缩点。 对于缩点后的$DAG$,必须满足是一条链,即在对该$DAG$进行拓扑排序的过程中,在任何时候都 有且只有一个点是入度为$0$ 。 因为若有两个点或以上的点同时出现入度为$0$,那么这几
阅读全文
摘要:"POJ原题链接" "洛谷原题链接" 很裸的费用流。 将每个点$x$拆成$x_1,x_2$,并从$x_1$向$x_2$连一条容量为$1$,费用为该点的权值的边,以及一条容量为$+\infty$,费用为$0$的边。 设$x$下方的点为$y$,右边的点为$z$(如果存在),则从$x_2$向$y_1,z_
阅读全文
摘要:"原题链接" 割去点使得无向图不连通,和最小割相似。 我们可以将点转化成边,这样就能跑最小割了。 枚举每两个不能直接到达的点$S,T$,使得删去一些点(除去这两个点)使得这两个点不连通(若两点能直接到达显然无解),然后我们按下面的方法建立新图: 1. 将每个点$x$,拆成两个点$x_1,x_2$,对
阅读全文
摘要:"原题链接" 即求二分图的不可行边数量,因为不保证是完备匹配,所以需要通过网络流求出任意一组最大匹配,并建立新图判断。 建新图:对于跑完网络流的图上已经匹配的边,建立反边;对于没有匹配的边,建立正边(图只改变边的方向,别的结构不变)。 有结论: 1. 必须边的判定条件为:$(x,y)$的流量为$1$
阅读全文
摘要:"原题链接" 这里有一个结论:最多能选取的藏身点个数等于最小路径可重复点覆盖的路径总数。 所以我们可以先传递闭包,然后求最小路径点覆盖即可。 cpp include include using namespace std; const int N = 210; int mtc[N], n; bool
阅读全文