树形DP(Holiday's Accommodation HDU4118)
来源:互联网 发布:java大整数 编辑:程序博客网 时间:2024/05/21 10:29
题意:有n间房子,之间有n-1条道路连接,每个房间里住着一个人,这n个人都想到其他房间居住,并且每个房间不能有两个人,问所有人的路径之和最大是多少?
分析:对于每条边来说,经过改边的人由该边两端元素个数较小者决定
#pragma comment(linker, "/STACK:1024000000,1024000000")#include"stdio.h"#include"string.h"#include"queue"#define M 100009using namespace std;struct node{ int u,v,next; __int64 w;}edge[M*2];int t,head[M],num[M],n;__int64 belong[M*2];void init(){ t=0; memset(head,-1,sizeof(head));}void add(int u,int v,__int64 w){ edge[t].u=u; edge[t].v=v; edge[t].w=w; edge[t].next=head[u]; head[u]=t++;}void dfs(int u,int f){ num[u]=1; for(int i=head[u];~i;i=edge[i].next) { int v=edge[i].v; if(v==f)continue; dfs(v,u); num[u]+=num[v]; belong[i]=num[v]; belong[i^1]=n-num[v]; }}int main(){ int Case,i,a,b,kk=1; __int64 c; scanf("%d",&Case); while(Case--) { scanf("%d",&n); init(); for(i=1;i<n;i++) { scanf("%d%d%I64d",&a,&b,&c); add(a,b,c); add(b,a,c); } dfs(1,1); __int64 ans=0; for(i=0;i<t;i+=2) { ans+=2*edge[i].w*min(belong[i],belong[i^1]); } printf("Case #%d: %I64d\n",kk++,ans); }}
0 0
- 树形DP(Holiday's Accommodation HDU4118)
- hdu4118 Holiday's Accommodation(树形dp)
- HDU4118:Holiday's Accommodation(思维 & dfs)
- HDU 4118--Holiday's Accommodation(树形dp)
- HDU 4118 Holiday's Accommodation(树形DP)
- 【树形DP】 HDU 4118 Holiday's Accommodation
- hdu 4118 Holiday's Accommodation 树形dp
- hdu 4118 Holiday's Accommodation 树形dp
- hdu 4118 Holiday's Accommodation 思维+树形dp
- hdu Holiday's Accommodation
- Regional_2011_H Holiday's Accommodation
- Holiday's Accommodation
- Holiday's Accommodation HDU
- hdu4118(树形DP)
- hdu4118 树形dp
- HDU 4118 Holiday's Accommodation
- HDU-4118-Holiday's Accommodation
- hdu 4118 Holiday's Accommodation
- Java匿名内部类
- ACM HDU 4833
- 使用apache htpasswd生成加密的密码文件,并使用.htaccess控制目录访问
- TIOBE11月编程语言排行榜:R受大数据影响跃至12位
- Github上600多个iOS开源项目
- 树形DP(Holiday's Accommodation HDU4118)
- Linux进程调度
- 开源许可证
- cracle 详解与安装
- Visual FoxPro 6.0~9.0解决方案与范例大全写作原稿及光盘下载
- 柔性数组
- Python Matplotlib 中对于 bar 显示时间的问题
- sql*plus概述
- HDU 4832