又是我....
  • 板块灌水区
  • 楼主dshzsh
  • 当前回复1
  • 已保存回复1
  • 发布时间2020/7/26 18:39
  • 上次更新2023/11/6 22:12:51
查看原帖
又是我....
200116
dshzsh楼主2020/7/26 18:39
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=1e6+10;
struct dd{
	int ys;
	int ans;
	int aans;
	int size;
	vector <int> lj;
	int spson;
};
dd tr[maxn]={};
int cx[maxn];
void bfs(int x,int fa)
{
	tr[x].size=1;tr[x].spson=-1;
	for(vector<int>::iterator it=tr[x].lj.begin();it!=tr[x].lj.end();it++)
	{
		int sx=*it;
		if(sx!=fa)
		{
			bfs(sx,x);
			tr[x].size+=tr[sx].size;
			if(tr[x].spson==-1||tr[sx].size>tr[tr[x].spson].size)
				tr[x].spson=sx;
		}
	}
	return;
}
void dfs(int x,int fa,int v,int rt)
{
	cx[tr[x].ys]+=v;
	if(v==1)
	{
		if(cx[tr[x].ys]>cx[tr[rt].ans]) tr[rt].ans=tr[x].ys,tr[rt].aans=tr[x].ys;
		else if(cx[tr[x].ys]==cx[tr[rt].ans])
			tr[rt].aans+=tr[x].ys;
	}
	for(vector<int>::iterator it=tr[x].lj.begin();it!=tr[x].lj.end();it++)
	{
		int sx=*it;
		if(sx!=fa)
			dfs(sx,x,v,rt);
	}
}
void qiu(int x,int fa,int op)
{
	for(vector<int>::iterator it=tr[x].lj.begin();it!=tr[x].lj.end();it++)
	{
		int sx=*it;
		if(sx!=fa&&sx!=tr[x].spson)
			qiu(sx,x,1);
	}
	if(tr[x].spson!=-1) qiu(tr[x].spson,x,0);
	if(tr[x].spson!=-1) tr[x].ans=tr[tr[x].spson].ans,tr[x].aans=tr[tr[x].spson].aans;
	for(vector<int>::iterator it=tr[x].lj.begin();it!=tr[x].lj.end();it++)
	{
		int sx=*it;
		if(sx!=fa&&sx!=tr[x].spson)
			dfs(sx,x,1,x);
	}
	cx[tr[x].ys]++;
	if(cx[tr[x].ys]>cx[tr[x].ans])
		tr[x].ans=tr[x].ys,tr[x].aans=tr[x].ys;
	else if(cx[tr[x].ys]==cx[tr[x].ans])
		tr[x].aans+=tr[x].ys;
	if(op)
	{
		cx[tr[x].ys]--;
		for(vector<int>::iterator it=tr[x].lj.begin();it!=tr[x].lj.end();it++)
		{
			int sx=*it;
			if(sx!=fa)
				dfs(sx,x,-1,x);
		}
	}
	return;
}
signed main()
{
	int n;
	scanf("%lld",&n);
	for(int i=1;i<=n;i++)
		scanf("%lld",&tr[i].ys);
	for(int i=1;i<n;i++)
	{
		int f,r;
		scanf("%lld%lld",&f,&r);
		tr[f].lj.push_back(r);
		tr[r].lj.push_back(f);
	}
	bfs(1,0);
	qiu(1,0,0);
	for(int i=1;i<=n;i++)
		printf("%lld ",tr[i].aans);
	return 0;
}

CF600E

测试数据就错了...
但是我查不出来代码
求大佬指导

2020/7/26 18:39
加载中...