蒟蒻求助:为何MLE
查看原帖
蒟蒻求助:为何MLE
970932
Kaury楼主2023/9/24 12:09
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <vector>
using namespace std;
const int MAXN=6005;
vector<int> e[MAXN];
int n,r[MAXN],f[MAXN][2],u,v,b[MAXN];
void dp(int x){
    for(int i=0;i<e[x].size();i++){
        dp(x); //递归到叶子节点
        int k=e[x][i];
        f[x][0]=max(f[k][1],f[k][0]); //x不去
        f[x][1]+=f[k][0]; //x去
    }
    f[x][1]+=r[x];
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);cout.tie(NULL);
    cin>>n;
    for(int i=1;i<=n;i++) cin>>r[i];
    for(int i=1;i<n;i++){
        cin>>u>>v;
        b[v]++;e[u].push_back(v);
    }
    for(int i=1;i<=n;i++){
        if(!b[i]){
            dp(i);
            cout<<max(f[i][0],f[i][1]);
            break;
        }
    }
    return 0;
}
2023/9/24 12:09
加载中...