P10572 [JRKSJ R8] +1-1 题解
题目思路
可以发现,非简单路径意味着可以走环,那么若是有两个相邻的点都是左括号或右括号,那么就可以反复走这两个点来刷左括号或右括号。同时,合法括号序列的长度必然为偶数,也就是说两点有合法路径时,必然有一条经过点数为偶数的路径。不妨假设询问路径为从\(x\)到\(y\),那么当
- \(x\)有与其相连的左括号(称其为\(LL\)点对)
- \(y\)也有与其相连的右括号(称其为\(RR\)点对)
- 且\(LL\)点对到\(RR\)点对有偶数长度的路径
时,必然存在合法路径。
上面得出的结论是充分非必要条件,我们考虑怎么将其扩充为充分必要条件。我们发现,如果\(x\)与某一\(LL\)点对有路径,且到他们的路径之间构成的括号序列合法时,实际上等同于\(x\)就是\(LL\)点对的情况。对\(y\)点也类似,所以下面只对\(x\)分析。由于只要存在这样的\(LL\)就可以,所以我们只需要对\(x\)找到离他最近的的\(LL\)点对。对于最近的\(LL\)点对,显然只会构成\(()()\ldots()\)这样的括号序列(否则就不是最近了)。
对于这种最简单的括号序列,我们可以对原图的部分边的基础上建立一个二分图,只对相邻的左括号和右括号之间进行连边,显然这个二分图只会存在这种最简单的括号路径。这样只要判断\(x\)点是否和某一\(LL\)点对在这个二分图的同一连通块里就可以了。
现在我们解决了上面的条件1、2,考虑怎么转换原来的条件3并加以解决。原来条件3等效于\(LL\)由于\(x\)到\(LL\)的路径一定是偶数,\(y\)到\(RR\)的路径也是偶数,且\(x\)与\(y\)在同一连通块里,那么只需判断\(x\)到\(y\)是否具有偶数长度的路径。这里可以运用一个小Trick:
我们考虑尝试对原图的边直接构建二分图。在\(x\)与\(y\)在同一连通块的前提下,如果原图就是二分图,那么\(x\)与\(y\)存在偶数路径,当且仅当\(x\)与\(y\)在二分图的同一边;如果原图不是二分图,那么原图必然存在奇环,也就是必然存在偶数路径。
最后考虑一种特殊情况:\(x\)与\(y\)之间只存在\(()()\ldots()\)这样的路径,只要判断一下在上面的部分二分图上\(x\)与\(y\)是否在不同的两边且在这个二分图的同一连通块即可。
下面证明这几种情况的完备性。