POJ 2342. Anniversary party 简单树形DP c++ 代码

来源:互联网 发布:淘宝账号异常申诉 编辑:程序博客网 时间:2024/05/17 14:17
#include <iostream>#include <vector>#include <cstring>#include <algorithm>using namespace std;#define maxN 6005int N, L, K;int dp[maxN + 1][2], father[maxN + 1];bool visited[maxN];void treeDp(int index) {if (visited[index]) return;visited[index] = true;for (int i = 1; i <= N; i++) {if (father[i] == index) {treeDp(i);dp[index][0] += max(dp[i][1], dp[i][0]);dp[index][1] += dp[i][0];}}}int main(void) {memset(dp, 0, sizeof(dp));memset(father, -1, sizeof(father)); memset(visited, 0, sizeof(visited));cin >> N;for (int i = 1; i <= N; i++) {cin >> dp[i][1];}while (cin >> L >> K && !(L == 0 && K == 0)) father[L] = K;// 找根节点int root = 1;while (father[root] != -1) root = father[root];treeDp(root);cout << max(dp[root][0], dp[root][1]) << endl;}

0 0
原创粉丝点击