WA了几个,大体正确,不知为何过不了,蒟蒻求调
查看原帖
WA了几个,大体正确,不知为何过不了,蒟蒻求调
1569314
lx2009楼主2025/6/15 13:07
#include<bits/stdc++.h>
using namespace std;
#define MAXN 200001
int maxn=0;
int n;int co[MAXN];
vector<int>Edge[MAXN];
pair<int,int> dfs(int x,int father){ //最长的白的是多长,最长的黑的是多长 
	//cout<<x<<endl;
	int w=0,b=0;
	for(int i=0;i<Edge[x].size();i++){
		int to=Edge[x][i];   
		if(to==father)continue;
		pair<int,int> med=dfs(to,x);
		int white_len=med.first,black_len=med.second;
		if(b!=0)maxn=max(maxn,white_len + b);
		if(w!=0)maxn=max(maxn,black_len + w);
		w = max(w,white_len); b = max(b,black_len);
	}
	if(co[x]==0)maxn=max(maxn,b);
	else maxn=max(maxn,w);
	pair<int,int> ret; ret.first=ret.second=0;
	if(co[x]==0)ret.first=1;
	else ret.second=1;
	if(w!=0)ret.first=w+1;
	if(b!=0)ret.second=b+1;
	return ret;
}
int main()
{
	int x,y;
	scanf("%d",&n);	
	for(int i=1;i<=n;i++)scanf("%d",&co[i]);
	for(int i=1;i<=n-1;i++){
		scanf("%d%d",&x,&y);
		Edge[x].push_back(y); Edge[y].push_back(x);
	}
	dfs(1,0);
	printf("%d\n",maxn);
	return 0;
}

2025/6/15 13:07
加载中...