Anniversary party POJ
来源:互联网 发布:淘宝人群标签 编辑:程序博客网 时间:2024/05/17 07:27
点击打开链接
第一道树形dp题目 虽然a了 但理解还是不到位
#include <stdio.h>#include <cstring>#include <algorithm>using namespace std;struct node{ int v; int next;};node edge[12010];int dp[6010][2];int first[6010],degree[6010],book[6010];int n,m,num,root;void addedge(int u,int v);void unite(int u,int v);int getf(int p);void dfs(int cur);int main(){ int i,j,u,v; while(scanf("%d",&n)!=EOF) { if(n==0) { scanf("%d",&n); break; } m=n-1; memset(dp,0,sizeof(dp)); for(i=1;i<=n;i++) { scanf("%d",&dp[i][1]); } memset(first,-1,sizeof(first)); memset(degree,0,sizeof(degree)); num=0; for(i=1;i<=m;i++) { scanf("%d%d",&u,&v); degree[u]++; addedge(u,v); addedge(v,u); } for(i=1;i<=n;i++) { if(degree[i]==0) { root=i; break; } } memset(book,0,sizeof(book)); book[root]=1; dfs(root); printf("%d\n",max(dp[root][0],dp[root][1])); } return 0;}void addedge(int u,int v){ edge[num].v=v; edge[num].next=first[u]; first[u]=num++; return;}void dfs(int cur){ int i,v; for(i=first[cur];i!=-1;i=edge[i].next) { v=edge[i].v; if(book[v]==0) { book[v]=1; dfs(v); dp[cur][0]+=max(dp[v][0],dp[v][1]); dp[cur][1]+=dp[v][0]; } } return;}
阅读全文
0 0
- poj 2342 Anniversary party
- POJ 2342 Anniversary party
- poj 2342 Anniversary party
- POJ 2342 Anniversary party
- POJ 2342 Anniversary party
- POJ-2342-Anniversary party
- POJ 2342 Anniversary party
- poj-2342Anniversary party
- POJ 2342 Anniversary party
- poj 2342 anniversary party
- POJ 2342 Anniversary party
- Anniversary party POJ - 2342
- Anniversary party POJ
- Anniversary party POJ
- poj 2342 Anniversary party
- POJ 2342 Anniversary party
- poj Anniversary party (树形DP)
- POJ Anniversary party By Assassin
- [LintCode]175.翻转二叉树
- js封装cookie函数
- 通过行为参数传递代码
- 常用正则表达式
- 从零开始写Python爬虫 --- 导言
- Anniversary party POJ
- js实现上传图片并预览
- 爬虫入门1:urllib.request
- 正则表达式
- BZOJ 1034: [ZJOI2008]泡泡堂BNB(贪心)
- String中的intern试题解析
- 从零开始写Python爬虫 --- 1.2 BS4库的安装与使用
- java 23种设计模式 深入理解
- callable接口