和第一个题解一模一样 为什么样例过不去 大爹们教教
查看原帖
和第一个题解一模一样 为什么样例过不去 大爹们教教
1062697
hellocccl楼主2024/5/17 10:54
//One More Time
#include<bits/stdc++.h>
using namespace std;

const int N=6894;
int a[N];
int IN[N];
int f[N][2];//以i节点作为根节点 选(1)或不选(0)所能得到的最大快乐指数
vector<int>g[N];
void dfs(int u){
    f[u][1]=a[u];   
    f[u][0]=0;
    for(auto v:g[u]){
        dfs(v);
        f[u][0]+=max(f[v][0],f[v][1]);
        f[u][1]+=f[v][0];
    }
    
}
void solve(){
    int n;cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }

    for(int i=1;i<=n-1;i++){
        int u,v;cin>>u>>v;
        g[v].push_back(u);
        IN[u]=1;
    }

    int gen;
    for(int i=1;i<=n;i++){
        if(IN[i]==0 ){
            gen=i;
            break;
        }
    }

    dfs(gen);
    cout<<max(f[gen][0],g[gen][1]);
}

signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int _=1;
    // cin>>_;
    while(_--)solve();
}
2024/5/17 10:54
加载中...