樹的重心 模板

2021-08-21 09:39:59 字數 499 閱讀 4933

刪除重心後,子樹的最大權值最小

dfs遍歷每個點,node的所有子樹除了它的兒子們還有它往父親那個方向的一顆子樹(權值=總權值-所有子樹權值和-1)

下面的**權值為邊權

#include 

using

namespace

std;

const

int maxn = 1e5 + 100, inf = 0x3f3f3f3f;

int n, k;

struct edge

};vector

g[maxn];

int d[maxn];

int sum = 0;

int min = inf, minnode = 0;

void dfs(int node, int par)

}max = max(max, sum - d[node]);

if (max < min)

}

模板 樹的重心

模板 求樹的重心 任務 求樹的重心 介面 vector way maxn 無向圖 int siz 該節點的子節點個數 包括自己 int mu 該節點的 最大,節點數最多 子樹的節點數 allnode 根節點的子節點個數 siz root int getroot int u,int fa 返回以u為根...

模板 樹的重心

定義 找到乙個點,其所有的子樹中最大的子樹節點數最少,那麼這個點就是這棵樹的重心,刪去重心後,生成的多棵樹盡可能平衡。首先,利用前向星存邊建立邊表。由於無向,所以要連兩次邊。我們用一次 df s dfs 建立以1為根節點時每個結點所在子樹的結點數。接下來考慮把這個點刪掉的結果,如果乙個非根結點有 p...

樹的重心 poj3701 模板題

樹的重心也叫樹的質心。找到乙個點,其所有的子樹中最大的子樹節點數最少,那麼這個點就是這棵樹的重心,刪去重心後,生成的多棵樹盡可能平衡。思路 dfs深搜 回溯 poj3701 有多個重心 ac include include include include include include includ...