HDOJ 1520 Anniversary party
来源:互联网 发布:2015年进出口贸易数据 编辑:程序博客网 时间:2024/05/16 10:11
树状DP入门。每组数据只有一颗树。一开始当二叉做,错了- -!一开始子节点开了1005,后来又试了105,都可以。
重写一遍,邻接表~当初的写法不忍直视。。。
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <cmath>using namespace std;#define N 100005typedef long long LL;struct Tree{ int val; Tree * next;}e[N], * head[N];int par[N];int v[N];int n;int ptr;void init(){ ptr = 0; for(int i = 1; i <= n; i++){ par[i] = i; } memset(head, NULL, sizeof(head));}void Insert(int x, int y){ par[x] = y; e[ptr].val = x; e[ptr].next = head[y]; head[y] = &e[ptr++];}int tdp(int x){ Tree *p; int ans0 = 0; int ans1 = v[x]; p = head[x]; while(p != NULL){ ans0 += tdp(p -> val); Tree *pp = head[p -> val]; while(pp != NULL){ ans1 += tdp(pp -> val); pp = pp -> next; } p = p -> next; } return max(ans0, ans1);}int main(){ while(scanf("%d", &n) != EOF){ init(); for(int i = 1; i <= n; i++){ scanf("%d", &v[i]); } int x, y; while(scanf("%d%d", &x, &y), x || y){ Insert(x, y); } int root = 0; for(int i = 1; i <= n; i++){ if(par[i] == i)root = i; } printf("%d\n", tdp(root)); } return 0;}
#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>using namespace std;int n;struct Node{ int par; int v; int son[105];//HDOJ数据中子节点105即可 int num;}a[6005];int r[6005];int v[6005];void init (int n){ for(int i=0;i<=n;i++) { a[i].par=i; a[i].v=0; a[i].num=0; }}int dfs(int x){ if(v[x]!=0)return r[x]; if(x==0)return 0; v[x]=1; if(a[x].num==0){r[x]=a[x].v;return r[x];} int i0=0,i1=a[x].v; for(int i=0;i<a[x].num;i++) { i0+=dfs(a[x].son[i]); for(int j=0;j<a[a[x].son[i]].num;j++) { i1+=dfs(a[a[x].son[i]].son[j]); } } r[x]=max(i0,i1); return r[x];}int main(){ while(scanf("%d",&n)!=EOF) { memset(v,0,sizeof(v)); init (n); for(int i=1;i<=n;i++) { scanf("%d",&a[i].v); } int x,y,k=0; while(scanf("%d%d",&x,&y),x||y) { a[x].par=y; a[y].son[a[y].num]=x; a[y].num++; } x=1; while(a[x].par!=x) { x=a[x].par; } int ans=dfs(x); printf("%d\n",ans); } return 0;}
- hdoj 1520 Anniversary Party
- HDOJ 1520 Anniversary party
- HDOJ 1520 Anniversary party
- hdoj 1520 Anniversary party(树形dp)
- Hdoj 1520&Poj2342 Anniversary party 【树形DP】
- hdoj 1520 Anniversary party 【树形DP入门】
- hdoj - 1520 - Anniversary party(基础树形DP)
- HDOJ 题目1520 Anniversary party(树形dp)
- HDU 1520 Anniversary party
- HDU-1520-Anniversary party
- HDU-1520-Anniversary party
- HDU 1520(Anniversary party)
- HUD 1520 Anniversary party
- HDU 1520 Anniversary party
- hdu 1520 Anniversary party
- Hdu 1520 Anniversary party
- HDU 1520 Anniversary party
- hdu 1520 Anniversary party
- How to use Classes in QTP
- 20130918学习小结
- 4 Different Ways to Associate Function Libraries to your QTP Scripts
- UI控件详解01-UISegmentedControl的详细使用(附效果图)
- TCP链接建立到释放过程
- HDOJ 1520 Anniversary party
- POJ 2446 Chessboard (匈牙利算法)
- Java核心技术,支撑Java程序对外接口的I/O
- LeetCode | Validate Binary Search Tree
- Shiro和AJAX完美整合
- How to think like a Computer Scientist: 课后习题第十八章3
- 网页艺术设计基础
- JSP页面点击“上移下移”链接排序
- cannot be hot swapped into a running virtal machine的解决方法