题目
简述题意:求直径的必须边。
首先,可通过两次dfs/bfsdfs/bfsdfs/bfs,求出一条直径这里不赘述。
引理:两条直径必有公共点。
证明显然:
假设两条直径无公共点,那么由于树的连通性,我们在把这两条直径连起来一定更长,
与直径的最长性矛盾。
之后我们画图找一下,对于两条直径下的情况。
我们只要求一下满足第一种情况的深度最大值uuu,再求出满足第二种情况的深度最小值vvv,
v−uv-uv−u,即为答案.特殊地,初始化u=0,v=dep[q]u=0,v=dep[q]u=0,v=dep[q].
这是否适用于所有情况呢?答案是显然的。
由于直径必交,而必须边的定义又是属于任意直径,
所以我们只要枚举直径上的点,看是否有合法分叉(能在直径中).
按照上面的求法,我们能保证不违反必须边的定义,同时最大,所以答案正确。
#include
作者:zsyzlzy
bzoj