1 条题解
-
0黄子清121 (2022ts162) LV 9 @ 2024-3-24 16:59:14
#include <queue> #include <math.h> #include <stack> #include <vector> #include <stdio.h> #include <iostream> #include <vector> #include <iomanip> #include <string.h> #include<cstring> #include <algorithm> #define LL long long const int N = 1e6 + 10; const int INF = 0x3f3f3f3f; using namespace std; int n , in[N] ; int dp[N][2] ; int a[N] ; vector<int> edg[N] ; int dfs(int id , bool flag) { if(dp[id][flag]) return dp[id][flag] ; for(int i = 0 ; i < edg[id].size() ; i++) { int to = edg[id][i] ; if(flag) { dp[id][flag] += dfs(to,0) ; } else dp[id][flag] += max(dfs(to,0),dfs(to,1)) ; } if(flag) { dp[id][flag] += a[id] ; } return dp[id][flag] ; } 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 ; edg[y].push_back(x); in[x]++; } int rt ; for(int i = 1 ; i <= n ; i++) { if(!in[i]) rt = i ; } int ans = max( dfs(rt , 0) , dfs(rt , 1) ) ; cout << ans << endl; return 0; } /*********************************************** 备注: *************************************************/
- 1
信息
- ID
- 196
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 5
- 标签
- 递交数
- 124
- 已通过
- 49
- 上传者