hdu4118
题意:
给你一颗无向带权树,每个定点上有一个人,问所有定点都不在自己位置上的最长路径总和是多少..
思路:
其实很简单,贪心的想下,既然要求全局最大,那么对于每一条边用的次数越多越好,
对于每一条边 ans += 他的权值*min(他左边点的个数,有边点的个数)//为了保证每一个都在边的另一面找到位置,最后输出ans * 2,因为是双向的,a ->b 那么 b ->a ,还有一个就是爆栈,杭电上好像是递归多少次后就默认是你无限递归了,所以加上防止爆栈的那句就行了...
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<stdio.h>
#include<string.h> #define N_edge 200000 + 100
#define N_node 100000 + 100
typedef struct
{
int from ,to ,next;
__int64 cost;
}STAR; STAR E[N_edge];
int list[N_node] ,tot;
__int64 ge[N_node]; void add(int a ,int b ,__int64 c)
{
E[++tot].from = a;
E[tot].to = b;
E[tot].cost = c;
E[tot].next = list[a];
list[a] = tot;
} __int64 minn(__int64 a ,__int64 b)
{
return a < b ? a : b;
} __int64 DFS(int s ,int fa)
{
__int64 sum = 0;
for(int k = list[s] ;k ;k = E[k].next)
{
int to = E[k].to;
if(to == fa) continue;
sum += DFS(to ,s);
}
ge[s] = sum;
return sum + 1;
} int main ()
{
int n ,i ,a ,b ,t ,cas = 1;
__int64 c;
scanf("%d" ,&t);
while(t--)
{
scanf("%d" ,&n);
memset(list ,0 ,sizeof(list));
tot = 0;
for(i = 1 ;i <= n - 1 ;i ++)
{
scanf("%d %d %I64d" ,&a ,&b ,&c);
add(a ,b ,c);
add(b ,a ,c);
}
memset(ge ,0 ,sizeof(ge));
DFS(1 ,-1);
__int64 sum = 0;
for(i = 1 ;i <= tot ;i += 2)
{
a = E[i].from;
b = E[i].to;
c = E[i].cost;
if(ge[a] < ge[b])
{
a = a + b;
b = a - b;
a = a - b;
}
sum += minn(ge[b] + 1 ,n - ge[b] - 1) * c;
}
printf("Case #%d: %I64d\n" ,cas ++ ,sum * 2);
}
return 0;
}
hdu4118的更多相关文章
- 树形DP(Holiday's Accommodation HDU4118)
题意:有n间房子,之间有n-1条道路连接,每个房间里住着一个人,这n个人都想到其他房间居住,并且每个房间不能有两个人,问所有人的路径之和最大是多少? 分析:对于每条边来说,经过改边的人由该边两端元素个 ...
- hdu-4118 Holiday's Accommodation(树形dp+树的重心)
题目链接: Holiday's Accommodation Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 200000/200000 ...
- [CF468D]Tree
[CF468D]Tree 题目大意: 一棵\(n(n\le10^5)\)个编号为\(1\sim n\)的点的带边权的树,求一个排列\(p_{1\sim n}\),使\(\sum dis(i,p_i ...
- 「题解」「CF468D」树中的配对
目录 题目大意 思路 源代码 本博客除代码之外,来自 skylee 大佬. 题目大意 一棵\(n(n\le10^5)\)个编号为\(1\sim n\)的点的带边权的树,求一个排列\(p_{1\sim ...
随机推荐
- 『力荐汇总』这些 VS Code 快捷键太好用,忍不住录了这34张gif动图
之前写过三篇文章,收获了极其不错的阅读量与转发量: 你真的会用 VS Code 的 Ctrl.Shift和Alt吗?高效易用的快捷键:多光标.跳转引用等轻松搞定 VS Code 中的 Vim 操作 | ...
- nessus 故障处理
0x00 问题描述 打开Nessues Web Client时,界面循环在Initializing Please wait while Nessus prepares files needed...和 ...
- 优秀的vue服务端渲染框架
目前国内优秀的基于vue的ssr框架有minissr,可以在服务端生成html代码,有利于搜索引擎爬取. https://www.wechatmini.com/vue/minissr 使用方法可以参考 ...
- FreeBSD csh shell 配置
在/etc/csh.cshrc里面加入: alias ls ls –G, 并重新登录 问:如何让FreeBSD的csh像bash那样按tab列出列出无法补齐的候选文件? 答:标准的方法是按Ctrl+D ...
- 什么是ETL?
一.ETL概念之背景 随着企业的发展,目前的业务线越来越复杂,各个业务系统独立运营.例如:CRM系统只会生产CRM的 数据:Billing只会生产Billing的数据.各业务系统之间只关心自己的数据, ...
- url里bookmark是什么意思
<a rel="bookmark" href="abc.com"> 点击查看 </a> rel 这个属性的全称是 relationsh ...
- Tomcat源码学习 - 环境搭建
一. 源码下载 PS: 多图预警 在开始阅读源码之前,我们需要先构建一个环境,这样才能便于我们对源码进行调试,具体源码我们可以到官网进行下载(这里我以8.5.63版本为例). 二. 项目导入 下载并解 ...
- 获取SpringBoot中所有的url和其参数
获取所有url和方法的对应关系 1 @Data 2 public class Param { 3 4 /** 5 * 字段名称 6 */ 7 private String name; 8 9 /** ...
- vue-cli脚手架安装及注意事项
1.下载nodejs 链接:https://nodejs.org/en/直接下载电脑对应的版本即可. 13.5网上说不大稳定(一个表示①推荐用户版本,②最新版本) 2.安装nodejs 建议在D或者E ...
- [unknown source] 快乐树
一.题目 题目描述 有一棵 \(n\) 个节点的数,每个点有点权 \(a_i\),定义一条路径的权值为路径上所有点的异或和,求所有路径的权值和,有 \(q\) 次修改,每次改一个点的点权. 数据范围 ...