萌新求教
查看原帖
萌新求教
101975
OranJun楼主2020/8/2 08:12

我最后用了两种写法

第一种:在处理结束后直接枚举i从1到n输出答案,代码是这样的

fr(i,1,n)
   if(tr[rt[i]].dat)
      printf("%d\n",xx[tr[rt[i]].ans]);
	else puts("0");

第二种:在dfs合并的时候计算并存入ans数组

代码

void dfs1(int x,int fa){
	for(int i=head[x];i;i=e[i].nxt){
		int y=e[i].to;
		if(y==fa)continue;
		dfs1(y,x);
		rt[x]=merge(rt[x],rt[y],1,mx);
	}
	if(tr[rt[x]].dat)ans[x]=xx[tr[rt[x]].ans];
}

第一种35分,第二种AC。。。

萌新求教。。。

2020/8/2 08:12
加载中...