【玄1关】蒟蒻求助一道树形dp
  • 板块灌水区
  • 楼主YuuKiErii
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/7/13 15:13
  • 上次更新2023/11/3 10:06:34
查看原帖
【玄1关】蒟蒻求助一道树形dp
663651
YuuKiErii楼主2023/7/13 15:13

https://www.luogu.com.cn/problem/P1122

rt 我的代码:

#include<bits/stdc++.h>
#define N 100005 
using namespace std;
struct node{
	int nxt,to;
}edge[2*N];
int ans=-1,dp[N],head[N],n,u,v,cnt,a[N],rd[N],root;
void add(int u,int v){
	cnt++;
	edge[cnt].nxt=head[u];
	edge[cnt].to=v;
	head[u]=cnt; 
}
void dfs(int x,int father){
	dp[x]=max(a[x],0);
	for(int i=head[x];i;i=edge[i].nxt){
		int y=edge[i].to;
		if(y==father)
		continue;
		dfs(y,x);
		if(dp[y]>0)
			dp[x]+=dp[y];
	}
	ans=max(dp[x],ans);
}
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
		scanf("%d",&a[i]);
	for(int i=1;i<n;i++){
		cin>>u>>v;
		add(u,v);
		rd[v]++;
		add(v,u);
	}
	for(int i=1;i<=n;i++)
		if(rd[i]==0){
			root=i;
			break;
		}
	dfs(root,0);
	cout<<ans;
	return 0;
}

样例能过 全部WA

2023/7/13 15:13
加载中...