求助洛谷P10725(树形dp),请大佬指教我代码哪里不对
  • 板块学术版
  • 楼主DGFLSzfd
  • 当前回复6
  • 已保存回复7
  • 发布时间2024/7/11 15:38
  • 上次更新2024/7/11 16:29:33
查看原帖
求助洛谷P10725(树形dp),请大佬指教我代码哪里不对
981551
DGFLSzfd楼主2024/7/11 15:38
#include<bits/stdc++.h>
using namespace std;
const int N=1e5;

int n,ans=0; 
bool a[N+10],b[N+10];
vector<int>s[N]; 
int dp[N+10][4];

void dfs(int k)
{
	
	for(int i=0;i<s[k].size();i++)
	{
		if(b[s[k][i]]) continue;
		
		b[s[k][i]]=1;
		
		dfs(s[k][i]);
		
		if((dp[s[k][i]][0]>=dp[k][0]) and (a[s[k][i]]==1 or dp[k][0]>0 ) )
		{
			dp[k][0]=dp[s[k][i]][0]+1;
			dp[k][1]=s[k][i];
		}
		if((dp[s[k][i]][2]>=dp[k][2]) and (a[s[k][i]]==0 or dp[k][2]>0 ) )
		{
			dp[k][2]=dp[s[k][i]][2]+1;
			dp[k][3]=s[k][i];
		}
		if(dp[k][1]==dp[k][3]) continue;
		ans=max(ans,dp[k][0]+dp[k][2]);
		//cout<<dp[k][0]<<' '<<dp[k][2]<<' '<<ans<<' '<<dp[k][1]<<' '<<dp[k][3]<<endl;
	}
}

int main()
{
	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i];
//	cout<<a[1]<<' '<<a[2]<<endl;
	for(int i=0;i<n-1;i++)
	{
		int u,v; cin>>u>>v;
		s[u].push_back(v);
		s[v].push_back(u);
	}
	
	b[1]=1;
	dfs(1);
	
	cout<<ans;
}
2024/7/11 15:38
加载中...