摘要:"原题链接" 很水的一道题,先用$tarjan$找边双连通分量并缩点,因为缩点后必然是一棵树,所以直接$LCA$求距离即可。 另外因为有重边(说好的只有单键呢),所以需要判重,一开始我用的$HASH$判重,结果又被卡了。。。 ~~和$HASH$天理难容,每次用都被卡~~ 最后一气之下$bitset$
阅读全文
摘要:"原题链接" 题意实际上就是让你添加尽量少的边,使得每个点都在至少一个环上。 显然对于在一个边双连通分量里的点已经满足要求,所以可以用$tarjan$找边双并缩点。 对于缩点后的树,先讲下我自己的弱鸡做法,每次找直径,因为将直径改为环显然使得新添的边贡献最大,这样贪心的连下去,直到所有点满足要求为止
阅读全文
摘要:"BZOJ原题链接" "洛谷原题链接" 在一个强连通分量里的$ATM$机显然都可被抢,所以先用$tarjan$找强连通分量并缩点,在缩点的后的$DAG$上跑最长路,然后扫一遍酒吧记录答案即可。 cpp include using namespace std; const int N = 5e5 +
阅读全文
摘要:"原题链接" 因为在一个强连通分量里,所有间谍互相(直接或间接)都掌握着证据,所以只要有一个间谍被控制,那么这整个强连通分量里的间谍都被控制。 所以我们可以对其进行缩点,并记录该强连通分量里的愿意被收买的间谍所需要最小资金以及编号最小的间谍。 对于缩点后的$DAG$,显然入度为$0$的点必须能被收买
阅读全文
摘要:"原题链接" 显然一个强连通分量里所有草场都可以走到,所以先用$tarjan$找强连通并缩点。 对于缩点后的$DAG$,先复制一张新图出来,然后对于原图中的每条边的终点向新图中该边对应的那条边的起点连一条边,表示逆向走一次,且之后不会再逆向了。 最后在该图上跑$SPFA$求单源最长路即可。 cpp
阅读全文
摘要:"原题链接" 做了挺多强连通分量缩点题,结果模板还晾着。。 $tarjan$找强连通缩点,然后拓扑排序$DP$就好。 cpp include using namespace std; const int N = 1e4 + 10; const int M = 1e5 + 10; struct eg
阅读全文
摘要:"BZOJ原题链接" "洛谷原题链接" 和 Going from u to v or from v to u?( "题解" )这道题类似,只不过是求最大子图的大小和个数而已。 一样用$tarjan$求强连通分量,并进行缩点,然后对于缩点后的$DAG$进行拓扑排序$DP$。 定义$size[i]$表示
阅读全文
摘要:"原题链接" 显然在一个强连通分量里,任意两个点都可以到达,所以我们先用$tarjan$求强连通分量,并进行缩点。 对于缩点后的$DAG$,必须满足是一条链,即在对该$DAG$进行拓扑排序的过程中,在任何时候都 有且只有一个点是入度为$0$ 。 因为若有两个点或以上的点同时出现入度为$0$,那么这几
阅读全文
摘要:"BZOJ原题链接" "洛谷原题链接" 很明显的差分约束,但数据范围较大,朴素$SPFA$判正环求解会$T$(理论上如此,但我看到有挺多人用朴素的还跑得挺快。。),所以需要优化。 我们所建立的有向图中所有边的权值只有$0$或$1$,而且若图中有环,那么环上所有边的权值必须为$0$,否则无解。 所以我
阅读全文
摘要:"POJ原题链接" "洛谷2746原题链接" "洛谷2812(加强版)原题链接" 显然在强连通分量里的所有学校都能通过网络得到软件,所以我们可以用$tarjan$求出强连通分量并缩点,统计缩点后每个点的入度和出度。 对于第一问,因为所有零入度的点无法通过网络得到软件,所以答案就是零入度的点的数量。
阅读全文
摘要:"原题链接" 先用$tarjan$找出所有$e DCC$,并进行缩点,这时桥的数量即是缩点后树的边数。 然后对于每一个添边$(x,y)$的操作,如果$x,y$属于同一个$e DCC$,那么桥的数量不变。 如果分别属于两个$e DCC$,那么从$x$所在的$e DCC$(设为$e[x]$)到$y$所在
阅读全文