51nod 1737 樹的重心

2021-07-29 23:30:14 字數 546 閱讀 6812

思路:

樹的重心也叫樹的質心。

找到乙個點,其所有的子樹中最大的子樹節點數最少,那麼這個點就是這棵樹的重心,刪去重心後,

生成的多棵樹盡可能平衡。

考慮每一條邊被統計進答案幾次,若斷開這條邊後樹形成大小為s1、s2的兩個聯通塊則這條邊最多被統計min(s1,s2)次。

刪去重心後任意同一聯通塊中的兩點不構成路徑。

#include using namespace std;

typedef long long ll;

const int n=1e5+10;

struct asde[n*2];

int head[n],tol,n;

void init()

void add(int u,int v,ll w)

bool vis[n];

int d[n];

int minnode,minbalence;

void dfs(int u,int pre)

maxson=max(maxson,n-d[u]);

if(maxson

51nod 1737 思維 樹重心

思路 對於每一條邊,我們如果想要使得他發揮最大價值,其實就是這條邊被用了 min sonsz u sonsz v 次,那麼我如果找到乙個點使得刪掉這個點之後所有的聯通分支的點的個數都小於等於n 2個點,那麼就可以構造出一種方案使得每條邊被使用min sonsz u sonsz v 次。所以就是找樹的...

51 nod 1737 配對 貢獻

1737 配對 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 給出一棵n個點的樹,將這n個點兩兩配對,求所有可行的方案中配對兩點間的距離的總和最大為多少。input 乙個數n 1 n 100,000,n保證為偶數 接下來n 1行每行三個數x,y,z表示有一條長度...

51nod 配對(求樹的重心)

傳送門 給出一棵n個點的樹,將這n個點兩兩配對,求所有可行的方案中配對兩點間的距離的總和最大為多少。input 乙個數n 1 n 100,000,n保證為偶數 接下來n 1行每行三個數x,y,z表示有一條長度為z的邊連線x和y 0 z 1,000,000,000 output 乙個數表示答案inpu...