提供一个较好理解的思路
查看原帖
提供一个较好理解的思路
533067
Syncwithme楼主2021/10/16 15:01

关键代码:

int dfs(int x){
	vis[x]=1;
	int f1=0,f2=0;
	for(int i=head[x];~i;i=e[i].nxt){
		if(vis[e[i].to]) continue;
		int cnt=dfs(e[i].to);
		f2+=f1*cnt;
		f1+=cnt;
	}
	ans[x]=(f2+f1)*2+1;
	return f1+1;
}

dfs()函数返回以x为根的子树大小,

f1当前是选一个时的方案数,f2当前是选两个的方案数,递推即可.

ans[x]就是答案.

2021/10/16 15:01
加载中...