HDU 6567 Cotree (树的重心)2019 ccpc江西省赛 A题

题目大意:两个树,连一条边使得最小

题目思路:

       根据树的重心的性质:

             树中所有点到某个点的距离和中,到重心的距离和是最小的;如果有两个重心,那么他们的距离和一样。

我们只要找出两棵树中,每棵树的所有点到一个点的距离和最小就可以了。

也就是找重心连接起来。

           然后dfs3遍历每条边算贡献,也就是这条边左边节点个数*右边节点个数就好了。

dfs0 :分离两棵树

dfs1 :求第一棵树的重心

dfs2 :求第二棵树的重心

dfs3:算每条边贡献

#include
#define ll long long
using namespace std;
const int MAXN=1e5+5;
int vis[MAXN];
vectorv[MAXN];
void dfs0(int x,int fa)
{
    //cout<

 

你可能感兴趣的:(tree)