dsu on tree模板

dsu on tree解决某个子树的众数,种类数问题 
时间复杂度 nlog_2n

#include 
 
using namespace std;
 
const int N=1e5+10;
 
int h[N],to[2*N],ne[2*N],cnt;
int sz[N],dep[N],fa[N],son[N];
int top[N],dfn,id[N],R[N],idx[N],skp;
int num[N],col[N],sum,ans[N];//记录出现颜色种类数的次数; 
int n,m;
void add_edge(int u,int v){
	to[cnt]=v;
	ne[cnt]=h[u];
	h[u]=cnt++;
} 
void init(){
	cnt=0;
	memset(h,-1,sizeof(h));
}
void dfs1(int u,int fat){
	sz[u]=1;
	dep[u]=dep[fat]+1;
	fa[u]=fat;
	for(int i=h[u];i!=-1;i=ne[i]){
		if(to[i]==fat)
			continue;
		dfs1(to[i],u);
		sz[u]+=sz[to[i]];
		if(!son[u]||sz[son[u]]

你可能感兴趣的:(模板,算法)