poj3140,树
来源:互联网 发布:淘宝店铺联盟分享店铺 编辑:程序博客网 时间:2024/04/30 03:47
给一个树形结构,每个点又权值,要求把它分成两部分使得两部分权值总和的差距最小。
这里要注意的是,abs好像不能处理64位整形,所以取绝对值函数要手写。
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>#define INF 2000000000__int64 dp[1000005],first[1000005],next[2000005],num[1000005],sum,min,n;struct edge{ __int64 u; __int64 v;}en[2000005];void add(__int64 a,__int64 b,__int64 p){ en[p].u=a; en[p].v=b; next[p]=first[a]; first[a]=p;}void getdp(__int64 s,__int64 f){ __int64 i; for(i=first[s];i!=-1;i=next[i]) { if(en[i].v!=f) { getdp(en[i].v,s); dp[s]+=dp[en[i].v]; } } dp[s]+=num[s];}__int64 ju(__int64 a){ if(a<0) return -a; else return a;}void getmin(){ __int64 i,j,a; for(i=2,min=ju(sum-dp[1]-dp[1]);i<=n;i++) { a=ju(sum-dp[i]-dp[i]); if(a<min) min=a; }}int main(){ __int64 m,i,j,k,l,a,b,idx,t; t=0; while(scanf("%I64d%I64d",&n,&m)!=EOF) { if(n==0&&m==0) break; t++; for(i=1,sum=0;i<=n;i++) { scanf("%I64d",&num[i]); sum+=num[i]; } idx=0; memset(first,-1,sizeof(first)); memset(next,-1,sizeof(next)); memset(dp,0,sizeof(dp)); for(i=1;i<=m;i++) { scanf("%I64d%I64d",&a,&b); idx++; add(a,b,idx); idx++; add(b,a,idx); } getdp(1,-1); getmin(); printf("Case %I64d: %I64d\n",t,min); } return 0;}
0 0
- poj3140,树
- poj3140 树的dfs
- POJ3140 - 树的DFS
- poj3140
- poj3140
- poj3140
- poj3140(经典-树的dp)
- poj3140(dfs) Contestants Division
- POJ3140--Contestants Division
- poj3140 树状dp
- POJ3140 简单树形DP
- POJ3140【树形DP】
- POJ3140 Contestants Division(树形DP)
- poj3140(树形DP,删边)
- poj3140 Contestants Division(树形DP)
- poj3140——contestants division
- poj3140--Contestants Division(树形dp-水题)
- poj3140 Contestants Division(树形dp)
- 【9秒原创】cocos2d-x横版rts手游《口袋仙侠》alpha1.0正式开源
- 拉普拉斯算子和梯度算子
- dedecms修改了网站名称后还是显示‘我的网站’的标题
- 中国三星援助雅安地震灾后重建项目发动
- <高效能程序员的修炼>读后感
- poj3140,树
- Android Layout 之 RelativeLayout,代码实现相对布局&android的button设置透明
- iframe刷新
- 张志东以退为进?
- 以SqlHelper为例论面向对象中封装的使用
- 第一次
- 关于tomcat中debug模式启动问题
- C#和js 实现文件上传及保存
- 正则表达式和Matcher,Pattern的简单用法