题意简述
$n$ 个节点的树,每条边权都是 $1$。有 $q$ 个询问,每次给定 $x,y,a,b,k$,表示你在树上加一条边 $(x\leftrightarrow y)$ ,并求从 $a$ 到 $b$ 走 $k$ 条边的最短路。其中每条边和点都允许重复经过。求完询问后,把 $(x\leftarrow y)$ 这条边删掉(即:询问之间都是独立的)。
$n\le 1e5; q\le 1e5; 1\le x,y,a,b \le n; 1\le k \le 1e9$
思路框架
首先倍增LCA维护两点之间的最短路。
由于边能重复经过,参考今年普及 T4 的思路,我们只要找一条长度 $\le k$ 并且和 $k$ 同奇偶的路即可。
原先$a,b$之间的最短路只能有一条。但是加上边 $x,y$ 之后,就多了两条:
$a\rightarrow x \rightarrow y \rightarrow b$,长度为 $Q(a,x)+1+Q(y,b)$
$a\rightarrow y \rightarrow x \rightarrow b$,长度为 $Q(a,y)+1+Q(x,b)$
(其中 $Q(u,v)$ 表示 $u$ 到 $v$ 的最短路,代码里叫PathLen
)
这三条里面判断一下,哪条能满足:长度 $\le k$ 且长度和$k$同奇偶
有一个就输出YES
,否则NO
。
代码
1 |
|
后记: 版权问题
(不想看就算了)
考场上,我想出了这个算法(第一个)。然后我把这个算法告诉了我的好朋友lym
。他又把这个算法告诉了他的好朋友zhk
。
最近zhk
也像我一样搭了一个hexo博客,他就来找我帮他调试博客的功能。然后我发现了他有一篇文章,就是这个的题解,同步发表于洛谷博客的。我一看这思路似乎很眼熟,便去问他你是怎么想出这思路的。
(开始回溯)他说,是lym
告诉他的,lym
给了他一张截图。
截图:
你们看这个头像和我的是否有几分相像呢(滑稽)。这真是 缘 分 的 天 空 啊。