求
查看原帖
求
742030
hyh0926楼主2024/9/7 08:14
#include<bits/stdc++.h>
using namespace std;
int n,a[200000],b[2],c[2];
bool f[200000];
vector<int> v[200000];
void dfs1(int l,int s,int g)
{
	f[l]=1;
	if(a[l]==g)
	{
		if(b[g]<s)
		{
			b[g]=s;
			c[g]=l;
		}
	}
	for(int i=0;i<v[l].size();i++)
	{
		if(!f[v[l][i]])
		{
			dfs1(v[l][i],s+1,g);
		}
	}
	return;
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	for(int i=1;i<n;i++)
	{
		int x,y;
		cin>>x>>y;
		v[x].push_back(y);
		v[y].push_back(x);
	}
	dfs1(1,1,0);
	memset(f,0,sizeof(f));
	dfs1(1,1,1);
	memset(f,0,sizeof(f));
	int z=c[1];
	dfs1(c[0],0,abs(a[c[0]]-1));
	memset(f,0,sizeof(f));
	dfs1(z,0,abs(a[z]-1));
	cout<<max(b[0],b[1]);
	return 0;
}

评测记录

2024/9/7 08:14
加载中...