题目链接:点击打开链接
题意:
给定n(n<=2500) 节点的一棵树
删除一条边再加入一条边使得树的直径最短。
思路:首先枚举删除的那条边,
然后计算出删除后的2棵子树各自的重心
则新建的边一定是重心的连线。
而新的直径要么是在某个子树中,要么是两个子树间。
#include <cstdio>
#include <algorithm>
#include <string.h>
#include <queue>
#include <cstring>
#include <cmath>
#include <iostream>
#include <vector>
using namespace std;
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
#define pb push_back
const double inf = 1e9;
const int N = 2505;
struct Ans{
int ans, oldx, oldy, nowx, nowy;
};
vector<int>edge[N];
void add(int u, int v){
edge[u].push_b