incubate的博客

博客

胡策题题解

2021-10-02 22:42:17 By incubate

题意

给定一个 $n$ 个点 $m$ 条边的无向图。有 $q$ 个人,第 $i$ 个人要从 $s_i$ 到 $t_i$。

现在你要给无向图的每条边定向。问是否存在一种定向方法使得所有人都能够到达目的地。

$n,m,q\leqslant 2\times 10^5,u_i\neq v_i,s_i\neq t_i$

  • subtask1(1-8,20pts):$n\leqslant 8,m\leqslant 15,q\leqslant 8$。
  • subtask2(11-13,10pts):保证原图是一个菊花图,$m=n-1$。(即有且仅有一个点 $u$,它向其它所有点都有一条边)
  • subtask3(14-15,10pts):保证图是一条链,$m=n-1$。
  • subtask4(16-20,30pts):保证图是一棵树,$m=n-1$。(依赖subtask 2,3)
  • subtask5(20-30,9,10,30pts):无特殊限制。(依赖subtask 1,2,3,4)

题解

可以发现,对于一个边双来说,一定存在一种定向方法,使得边数内两两点之间均可到达。

所以一个边双相当于一个点。那么我们缩点,把图变成一颗树。这样,$s$ 到 $t$ 只能走树上简单路径。

我们把 $s\rightarrow LCA$ 的路径打向上的标记,把 $LCA\rightarrow t$ 的路径打向下的标记。$LCA$ 可以通过倍增预处理。

只要没有一条边同时有两种标记,就是合法的。打标记使用树上差分实现。

时间复杂度:$ O(n+m+q\log n)$。

有一些细节:

  1. 原图不保证连通,所以在缩点,预处理倍增,判断答案的时候要在每个连通块都做一次。
  2. 原图可能有重边,所以 $\rm tarjan$ 的时候要记上一条边的编号而不是父亲节点。

评论

pamphlet
巨大多难写🤮
  • 2021-10-03 10:33:49
  • Reply
UCB
"NOIP模拟"
  • 2021-10-05 09:48:03
  • Reply

发表评论

可以用@mike来提到mike这个用户,mike会被高亮显示。如果你真的想打“@”这个字符,请用“@@”。