题意:在树上找两个点,使得树上的点到这两个点之一的最短距离的最大值最小。
思路:一个点的话明显就是中心了。换成了两个点,那么先考虑一下,明显这两个点在直径上是最优的,那么接下来,就可以二分一下距离,这样就可以求出相应的点的位置,接下来通过bfs判断是否满足要求就行了。
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<map>
#include<queue>
#include<stack>
#include<set>
#include<cmath>
#include<vector>
#include<bitset>
#define inf 0x3f3f3f3f
#define Inf 0x3FFFFFFFFFFFFFFFLL
#define eps 1e-6
#define pi acos(-1.0)
using namespace std;
typedef long long ll;
const int maxn = 200000 + 10;
struct Edge
{
int v,next;