poj 2342 Anniversary party 树形dp入门
来源:互联网 发布:python 变量写入txt 编辑:程序博客网 时间:2024/05/16 15:21
点击打开链接
#include <iostream>#include <algorithm>#include <cstring>using namespace std;const int M =6100;int dp[M][2]; //dp[i][0] i不去 = sigma累加 max(dp[j][0],dp[j][1]) j为i的子节点 // dp[i][1] i去 = sigma 累加 dp[j][0] int n,rat[M],fa[M],visit[M],leaf[M],rt;//rt为root void dfs(int node){visit[node]=1;if(leaf[node]) // 叶节点 {dp[node][1]=rat[node];dp[node][0]=0;return;}for(int i=1;i<=n;i++){if(!visit[i]&&fa[i]==node) {dfs(i);dp[node][0]+=max(dp[i][1],dp[i][0]);//node不去,取i去或不去的最大值dp[node][1]+=dp[i][0];}}}int main(){cin>>n;memset(dp,0,sizeof(dp));memset(visit,0,sizeof(visit));for(int i=1;i<=n;i++){cin>>rat[i];leaf[i]=1;//leaf[i]节点i是否为叶节点fa[i]=i; dp[i][1]=rat[i];//初始化 dp[i][1] 并不是最终的dp[i][1] }int x,y;while(cin>>x>>y&&(x+y)){fa[x]=y;//树 :rt除外每个节点只有一个直接先驱 leaf[y]=0;}rt=1; while(fa[rt]!=rt)//找到root { rt=fa[rt];} dfs(rt);int ans=max(dp[rt][0],dp[rt][1]);cout<<ans<<endl;return 0;}
0 0
- poj 2342 Anniversary party 树形dp入门
- poj 2342 Anniversary party 树形dp入门
- poj Anniversary party(树形dp入门)
- poj 2342 anniversary party(树形dp入门)
- [ACM] POJ 2342 Anniversary party (树形DP入门题)
- POJ 2342 Anniversary party (树形dp 入门题)
- [ACM] POJ 2342 Anniversary party (树形DP入门题)
- POJ 2342 Anniversary party(树形DP入门)
- HDU 1520 & POJ 2342 Anniversary party(树形DP入门题)
- POJ 2342 Anniversary Party题解 - 树形DP入门题目
- POJ 2342 Anniversary party (树形dp入门)
- poj-2342 Anniversary party(树形DP入门)
- poj 2342 Anniversary party (树形dp入门)
- POJ 2342 Anniversary party (最基础树形DP入门)
- poj 2342 Anniversary party (树形dp入门)
- 树形dp入门(poj 2342 Anniversary party)
- poj 2342 Anniversary party 树形DP
- poj 2342 Anniversary Party(树形dp)
- [leetcode]55. Jump Game 贪心
- 华为2017校招机试题
- 计算机网络随笔
- JavaScript——判断js数据类型(类型检测)
- 抽签问题
- poj 2342 Anniversary party 树形dp入门
- HYSBZ 2190 仪仗队【容斥原理 OR Euler(两种)】
- 解题:不用循环、递归,如何从 1 打印到 100?
- 如果看了这篇文章你还不懂傅里叶变换,那就过来掐死我吧(3)
- CDH eclipse不兼容问题
- 上传插件uploadify介绍
- 正则表达式 常见
- NotePad++ 在 windows10 上用 vs2015 编译
- NOIP模拟题 2016.9.3 [数论] [逆序对] [树状数组] [树形dp]