求助大佬
查看原帖
求助大佬
359430
江户川コナン楼主2021/8/25 22:40

求助大佬!只有60pts

代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn=6005;
int n,h[maxn],dp[maxn][2];
vector<int> G[maxn];
int dfs(int x,int y){
    if(dp[x][y]!=0) return dp[x][y];
    if(y==1){
        for(int i=0;i<G[x].size();i++){
            dp[x][y]+=dfs(G[x][i],0);
        }
        dp[x][y]+=h[x];
    }else{
        for(int i=0;i<G[x].size();i++){
            dp[x][y]+=max(dfs(G[x][i],0),dfs(G[x][i],1));
        }
    }
    return dp[x][y];
}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>h[i];
    }
    int u,v;
    for(int i=1;i<n;i++){
        cin>>u>>v;
        G[u].push_back(v);
    }
    dfs(1,0);
    dfs(1,1);
    cout<<max(dp[1][0],dp[1][1])<<endl;
    return 0;
}

恳请各位大佬指点迷津

2021/8/25 22:40
加载中...