【模板】树上启发式合并

模板题

#include
using namespace std;
#define N 100005
int n,a[N],ans[N],son[N],siz[N];
vectorg[N];
int f[N],sum,m;
inline void dfs1(int x,int fa)
{
	siz[x]=1;
	int ml=0,md=0;
	for(int i=0;iml)
				ml=siz[g[x][i]],md=g[x][i];
		}
	son[x]=md;
}
inline void dfs2(int x,int fa,int d,int s1)
{
	f[a[x]]+=d;
	if(d==1&&f[a[x]]==1)
		sum++;
	if(f[a[x]]==0)
		sum--;
	for(int i=0;i

 

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