发布一些众所周知的事情

学术版

luogu_gza @ 2024-03-10 11:02:14

这样的做法有点讨论区博客,但请见谅,我想让更多人看到这个。

平时各位求树的直径的时候通常使用的是两遍 dfs,但是这个算法在负权边时可以被卡掉。

下面的数据就可以:

5
1 2 100
1 3 -100
3 4 -100
4 5 200 

两遍 dfs 程序一般会输出 100(假如你第一遍 dfs 的起点不是 5 的话)。

而求一个点往下的最长链和次长链做法会输出 200,这是正确的答案。

今天给人调题的时候刚刚发现的。

请勿喷,这是一位初二老年选手非常激动的发现。


by xiaosi4081 @ 2024-03-10 11:03:53

负权边确实不能用两次 dfs 啊,要用 dp


by TsinghuaMeng @ 2024-03-10 11:06:25

@luogu_gza 额, dfs 不能算负权边不是常识?


by luogu_gza @ 2024-03-10 11:07:17

@Hot_tear 我从来不知道这件事情/sad


by Accelessar @ 2024-03-10 11:09:41

其实 oiwiki 上特地强调了这个的(


by rui_er @ 2024-03-10 11:12:13

两次 dfs 不能用于负权边,这个是我学直径的时候就知道的()


by luogu_gza @ 2024-03-10 11:13:34

再者,“离某个点最远的点一定是直径断电”这个性质貌似也没了!


|