题解 P5234 [JSOI2012] 越狱老虎桥
洛谷。
题意
有一个 $n$ 个节点,$m$ 条边的图,还有一条不确定的边,问最劣情况下的桥的权值最小值(极其省流版)。若这个图强联通则输出 $-1$。
分析
其实这个省流版题意就带了一定的分析了,要使有一个电网没有通电,那么必然需要使其变成两个联通块,那么我们删除的这条边也就一定是一条桥了。
首先要做的就是缩点,在处理这一类的题目时,先思考缩点后的树的情况可以节省很多没有必要的思考,可以给我们提供整个方向。
接下来我们就要思考我们这条不确定的边的影响,因为我们的答案是最劣情况下的桥的权值最小值,因此,我们从最小的边开始,假如这条边不能被这一条边保护,那这条边就是答案。
我们分析这一条边能保护的对象,他与原来的那棵树连成了一个环,这一条环上的我们都能保护。(令这一条边两端为 $U$,$V$)。
也就是说,我们枚举的这一条边的两边 $u$、$v$($u$ 为 $v$ 的父亲),$U$ 与 $V$ 中必然有一个节点是 $v$ 子树下的,而另一个,必然不可以是。考虑在 $dfn$ 序上,就可以使 $U$,与 $V$ 约束在一个范围内,最后就可以解决了。
sort(edge+1,edge+cnt+1);
for(int i=1; i<=cnt; ++i) {
int u=edge[i].u,v=edge[i].v,w=edge[i].w;
if(fa[v][0]!=u) swap(u,v);
if(dfn[v]<=L1&&R1<=R[v]&&dfn[v]<=L2&&R2<=R[v]) print(w);
if(dfn[v]<=L1&&R1<=R[v]) continue;
if(dfn[v]<=L2&&R2<=R[v]) continue;
if(L1<=dfn[v]&&R[v]<=R1) {
L1=dfn[v],R1=R[v];
continue;
} else if(L2<=dfn[v]&&R[v]<=R2) {
L2=dfn[v],R2=R[v];
continue;
} else print(w);
}
print(-1);
时间复杂度:$O(m\log m)$,瓶颈为排序,排序优化后可至 $O(m)$。

浙公网安备 33010602011771号