一个问题
查看原帖
一个问题
798144
SukiYuri楼主2023/12/23 23:18
#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=16005;
int head[maxn],val[maxn],n,cnt=0,ans=-0x7f7f7f7f;
struct edge{
    int nxt,to;
}E[maxn<<1];
inline void adde(int u,int v){
    ++cnt;
    E[cnt].to=v;
    E[cnt].nxt=head[u];
    head[u]=cnt;
}
int dfs(int cu,int fa){
    int res=0;
    for(int i=head[cu];i;i=E[i].nxt){
        int to=E[i].to;
        if(fa==to)continue;
        res+=max(0,dfs(to,cu));
    }
    ans=max(res,ans);
    ans=max(res+val[cu],ans);
    return res+val[cu];
}
int main(){
    scanf("%d",&n);
    bool bl=true;
    for(int i=1;i<=n;++i){
        scanf("%d",&val[i]);
        if(val[i]>0)bl=false;
        ans=max(ans,val[i]);
    }
    if(bl)return(printf("%d",ans)&0);
    for(int i=1;i<n;++i){
        int u,v;
        scanf("%d%d",&u,&v);
        adde(u,v);adde(v,u);
    }
    dfs(1,0);
    cout<<ans;
    return 0;
}

这个代码无法AC,需将dfs函数改成

int dfs(int cu,int fa){
    int res=val[cu];
    for(int i=head[cu];i;i=E[i].nxt){
        int to=E[i].to;
        if(fa==to)continue;
        res+=max(0,dfs(to,cu));
    }
    ans=max(res,ans);
    return res;
}

才可以哪位大佬可以给我解释解释,谢谢

2023/12/23 23:18
加载中...