P1352求调
  • 板块学术版
  • 楼主_5307_
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/7/6 15:01
  • 上次更新2023/11/3 11:20:19
查看原帖
P1352求调
807928
_5307_楼主2023/7/6 15:01

刚学树形DP,60pts

#include<bits/stdc++.h>

using namespace std;

vector<int>tr[1086];

int f[1086][2];

bool v[1086];

int a[1086];

int n;

void dfs(int op){

    f[op][0]=0; 
	
	f[op][1]=a[op];

    for(int i:tr[op]){

        dfs(i);

        f[op][0]+=max(f[i][0],f[i][1]);

        f[op][1]+=f[i][0];

    }

}

int main() {

    cin>>n;

    for(int i=1;i<=n;i++)
	
		cin>>a[i];

    for(int i=1;i<n;i++) {

		int x,y;

        cin>>x>>y;

        v[x]=true;

        tr[y].push_back(x);

    }

    int root;

    for(int i=1;i<=n;i++)

        if(!v[i]){
		
			root=i;
			
			break;
		
		}

    dfs(root);

    cout<<max(f[root][0],f[root][1]);
    
    return 0;

}


悬2关

2023/7/6 15:01
加载中...