板子(c++)

记录各种算法及数据结构板子
持续更新中...

算法

树链剖分

void init(long root)
{
	cnt=0;
	dep[root]=0;
}

void dfs1(long now)
{
	size[now]=1;
	son[now]=0;
	for(auto i:mp[now])
		if(i!=fa[now]){
			fa[i]=now;
			dep[i]=dep[now]+1;
			dfs1(i);
			size[now]+=size[i];
			if(size[i]>size[son[now]])
				son[now]=i;
		}
}

void dfs2(long now,long t)
{
	id[now]=++cnt;
	top[now]=t;
	if(!son[now])return;
	dfs2(son[now],t);
	for(auto i:mp[now])
		if(i!=fa[now]&&i!=son[now])
			dfs2(i,i);
}
posted @ 2020-06-08 20:40  dreaming2019  阅读(173)  评论(0)    收藏  举报