ACM模版
添加于2017.3.8日
树的重心
typedef long long ll;
typedef pair<
int,
int> pll;
const int INF =
0x3f3f3f3f;
const int MAXN =
100000 +
10;
int n;
int zx, sz;
int son[MAXN], vis[MAXN];
vector<pll> edge[MAXN];
void init()
{
for (
int i =
1; i <= n; i++)
{
edge[i].clear();
}
memset(vis,
0,
sizeof(vis));
sz = INF;
zx = -
1;
}
void dfs(
int r)
{
vis[r] =
1;
son[r] =
0;
int tmp =
0;
for (
int i =
0; i < edge[r].size(); i++)
{
int v = edge[r][i].second;
if (!vis[v])
{
dfs(v);
son[r] += son[v] +
1;
tmp = max(tmp, son[v] +
1);
}
}
tmp = max(tmp, n - son[r] -
1);
if (tmp < sz)
{
zx = r;
sz = tmp;
}
}
转载请注明原文地址: https://ju.6miu.com/read-5142.html