题解
你考虑任选一个叶子节点,我们考虑其和其父亲相连的边。
- 如果说没有路径经过这一条边,那么直接删去这个叶子节点并没有什么影响。
- 如果说经过其的路径个数为 (1) ,那么这条路径的方向必然两个都可以,将答案加一后将该点删去即可。
- 如果说经过其的路径个数为 (2) ,那么我们可以从中随机选取两条路径,让他们的方向相反。由于两条路径可以分为三个部分:公共部分、第一条的一部分、第二条的一部分。可以知道,公共部分的答案必定为 (2) ,我们可以直接更新删点;然后对于非公共部分的两部分,可以发现他们是连续的,同时方向也是连续的,所以可以把他们直接合成一条链继续计算。
按照这样的方案执行即可。但是感觉代码过于繁琐,就没有写了,写一下题解加深印象。