hdu4118(树形DP)
来源:互联网 发布:最好的防火墙软件 编辑:程序博客网 时间:2024/06/04 19:01
题意:给一棵树(每个节点是一个城市),每个节点上有一个人。每个人都要到另外一个城市,并且每个城市最后只能有一个人。问全局所有人旅行的最长的长度可以是多少。
解法:一定可以构造一种这样的情形:对于每条边,使得少的一边的所有人都到另一边去。这样就实现了每条边的最大化利用。一定是最优解。
代码:
/******************************************************* author:xiefubao*******************************************************/#pragma comment(linker, "/STACK:102400000,102400000")#include <iostream>#include <cstring>#include <cstdlib>#include <cstdio>#include <queue>#include <vector>#include <algorithm>#include <cmath>#include <map>#include <set>#include <stack>#include <string.h>//freopen ("in.txt" , "r" , stdin);using namespace std;#define eps 1e-8const double pi=acos(-1.0);typedef long long LL;const int Max=100100;const int INF=1000000007;struct edge{ int u,v; LL value; int next;} edges[Max*2];bool rem[Max];int head[Max];LL num[Max];int tot=0;void addedge(int u,int v,int value){ edges[tot].u=u; edges[tot].v=v; edges[tot].value=value; edges[tot].next=head[u]; head[u]=tot++;}int n;LL ans=0;void dfs(int k){ if(rem[k]) return ; rem[k]=1; num[k]=1; for(int i=head[k];i!=-1;i=edges[i].next) { int t=edges[i].v; if(rem[t])continue; dfs(t); ans+=min(num[t],n-num[t])*edges[i].value; num[k]+=num[t]; }}int main(){ int t;cin>>t;int kk=1; while(t--) { ans=0; tot=0; memset(head,-1,sizeof head); memset(rem,0,sizeof rem); scanf("%d",&n); for(int i=0;i<n-1;i++) { int u,v,value; scanf("%d%d%d",&u,&v,&value); addedge(u,v,value); addedge(v,u,value); } dfs(1); printf("Case #%d: %I64d\n",kk++,ans*2); } return 0;}
0 0
- hdu4118(树形DP)
- hdu4118 树形dp
- 树形DP(Holiday's Accommodation HDU4118)
- hdu4118 Holiday's Accommodation(树形dp)
- HDU4118
- hdu4118
- 树形dp
- 树形DP
- 树形dp
- 树形DP
- 树形dp
- 树形DP
- 树形DP
- 树形DP
- 树形DP
- 树形dp
- 树形dp
- 树形dp
- 尊重原创,请保证您的文章为原创作品尊重原创,请保证您的文章为原创作品
- DB2 未发出启动数据库管理器的命令
- CCActionCatmullRom(样条曲线动作 通过点数组自定义动作曲线)
- MYSQL中 ENUM 类型
- 【C语言】17-预处理指令3-文件包含
- hdu4118(树形DP)
- TelephonyManager类详解
- C++学习笔记-友元类声明
- 【C语言】18-变量类型
- CCActionEase(可以对动作进行包装 使动作的in和out速度发生改变 使动作更平滑)
- Spring Cache抽象详解
- 龙舟水好猛 广东又将暴雨三天局部特大暴雨
- 一个日期计算并转换格式的实例
- 在OpenCV中用cvCalibrateCamera2进行相机标定(附程序)