您的位置:首页 > 其它

hdu 1520 树形dp入门题

2014-04-30 19:03 363 查看
#include<stdio.h>

#include<string.h>

#define N 6100

int a
;

int dp
[2];

struct node {

int u,v,w,next;

}bian[N*2];

int head
,yong,visit
;

void addedge(int u,int v) {

bian[yong].v=v;

bian[yong].next=head[u];

head[u]=yong++;

}

int M (int a,int b) {

return a>b?a:b;

}

int dfs(int u) {

int i,j;

dp[u][0]=0;

dp[u][1]=a[u];

visit[u]=1;

for(i=head[u];i!=-1;i=bian[i].next) {

j=bian[i].v;

if(!visit[j]) {

dp[u][0]+=dfs(j);

dp[u][1]+=dp[j][0];

}

}

return M(dp[u][0],dp[u][1]);

}

int main() {

int n,i,x,y;

while(scanf("%d",&n)!=EOF) {

yong=0;

memset(visit,0,sizeof(visit));

memset(head,-1,sizeof(head));

for(i=1;i<=n;i++)

scanf("%d",&a[i]);

while(scanf("%d%d",&x,&y),x||y) {

addedge(y,x);

addedge(x,y);

}

memset(dp,0,sizeof(dp));

printf("%d\n",dfs(3));

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: