有向图的连通性(Tarjan) 测试二 题目记录
posted on 2023-10-08 09:11:51 | under 题集 | source
zsq 真是为学生的身心健康着想,“杀人游戏”被和谐成“抓小偷”。
第四题 zsq 的神奇数据还会出现自己给自己戴绿帽的情况。
T1:水。答案是每个强连通分量的最小点权之和。
T2:水。经典的 \(\rm Floyd + bitset\) 优化,复杂度 \(O(\frac {n^3}{32})\)。
不过我还有一种更优秀的写法,只需缩点后维护每两个强连通分量的连通情况,不过由于缩完点后可以跑拓排,所以再加上个 \(\rm bitset\) 复杂度是 \(O(\frac {n^{*}m^{*}}{32})\) 的。
(\(n^*,m^*\) 是缩点后的点数和边数,所以在一般数据下表现比较优秀,即使卡满了还是有常数上的优势)
T3:水。找到缩点后入度为 \(0\) 的分量,答案是每个这样的分量的最小点权之和,注意若存在无法被贿赂的情况无解。
T4:图论建模题,那么第一个问题就是如何建边。
仔细看看题目描述,“离婚”操作是这样的:第一对 cp 直接被拆散,那么男一就去寻找曾经的女友女二,然后男二老婆被抢了又去找女三,接着男三找女四......以此类推。
(注意女一不会主动找其它男的)
那么对于原先的婚姻关系,我们应当由女向男连一条边;对于“旧情”则是由男向女连一条边。这样做,“离婚”操作就能抽象地看作由男一出发的一条路径了。
(其实试试也能知道怎么连)
然后回到“离婚操作”,如果拆散男一女一后,仍可以让所有人找到伴侣,那么显然女一也会被某个男的找到再续前缘。
于是“不安全婚姻”应当是这样的:男一找女二,男二找女三,男三找女四......男 \(x\) 找女一。
回到图论模型中,显然构成一个环,于是自然而然想到强连通分量了。
最后考虑如何判定是否安全,只需男的和女的在同一个强连通分量中即可。
T5:首先考虑 DAG 上的情况,显然只需检查入度为 0 的人即可,若其中存在杀手则结束,否则一层一层检查下去一定能找到杀手,并且可以保证警察同志的安全~
注意可以使用排除法,即检查 \(n-1\) 个人就一定能得知 \(n\) 个人的全部身份。
那么,只需逐个检查每个入度为 \(0\) 的点,若它的所有可达节点都能被其它入度为 \(0\) 的点到达,则说明不检查这个人也行。
(注意这样的人至多存在一位,不可重复计数)
具体的,考虑拓扑排序求出每个点能被多少个入度为 \(0\) 的点到达,然后按上述步骤判定即可。
不过检查所有可达节点显然会超时,仔细想想,没必要检查所有可达节点,只需检查直接相连的点即可。
对于一般图,只需缩点转换为 DAG 处理即可。
还有一个细节:排除法只能对一个人使用,所以点数 \(>1\) 的强连通分量一定无法使用排除法。
最后是计算概率,设 \(cnt\) 为最少检查的人数,则概率为 \(\frac {n-cnt}{n}\)。
(吐槽一下连计算概率都能写错的 sb 作者)

浙公网安备 33010602011771号