关于树剖
  • 板块学术版
  • 楼主FxorG
  • 当前回复4
  • 已保存回复4
  • 发布时间2021/4/7 17:32
  • 上次更新2023/11/5 00:55:21
查看原帖
关于树剖
125901
FxorG楼主2021/4/7 17:32

RT 我现在的写法一般是(将 id rk这些放在dfs1)

但是被P4556打了 发现这东西好像必须放在dfs2 蒟蒻想问问有些什么区别/kk

	void dfs1(int x) {
		dep[x]=dep[fa[x]]+1; id[x]=++tot; rk[tot]=x; sz[x]=1;
	//	cout<<x<<endl;
		for(int i=head[x];i;i=e[i].nex) {
			int y=e[i].to;
			if(y==fa[x]) continue;
			fa[y]=x;
			dfs1(y); sz[x]+=sz[y];
			if(sz[y]>sz[son[x]]) son[x]=y;
		}
	}
	void dfs2(int x,int tp) {
		top[x]=tp;
		if(son[x]) dfs2(son[x],tp);
		for(int i=head[x];i;i=e[i].nex) {
			int y=e[i].to;
			if(y==fa[x]||y==son[x]) continue;
			dfs2(y,y);
		}
	}
2021/4/7 17:32
加载中...