关于找树的重心
查看原帖
关于找树的重心
175011
rfsfreffr楼主2022/8/16 12:27

每次找之前重新算一遍当前树的大小就行了吧,我是这么写的:

部分代码:


void dfs(int u,int fa) {
	siz[u]=1;
	int maxn=0;
	for(int i=0; i<b[u].size(); i++) {
		int v=b[u][i].to;
		int id=b[u][i].id;
		if(v==fa||vis[id]) continue;
		
		dfs(v,u);
		siz[u]+=siz[v];
		if(siz[v]>maxn) maxn=siz[v];
	}
	maxn=max(maxn,sz-siz[u]);
	if(maxn<minn) {
		minn=maxn;
		new_rt=u;
	}
}

void get_size(int root) {
	dfs(root,0);
	sz=siz[root];
} 

这样找的重心肯定应该是没问题的, 这一部分多出来的时间复杂度应该也仅是 O(n)O(n)

#7 跑了 24ms

2022/8/16 12:27
加载中...