题意:

      给你一颗无向带权树,每个定点上有一个人,问所有定点都不在自己位置上的最长路径总和是多少..

 

思路:

      其实很简单,贪心的想下,既然要求全局最大,那么对于每一条边用的次数越多越好,

对于每一条边 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的更多相关文章

  1. 树形DP(Holiday's Accommodation HDU4118)

    题意:有n间房子,之间有n-1条道路连接,每个房间里住着一个人,这n个人都想到其他房间居住,并且每个房间不能有两个人,问所有人的路径之和最大是多少? 分析:对于每条边来说,经过改边的人由该边两端元素个 ...

  2. hdu-4118 Holiday's Accommodation(树形dp+树的重心)

    题目链接: Holiday's Accommodation Time Limit: 8000/4000 MS (Java/Others)     Memory Limit: 200000/200000 ...

  3. [CF468D]Tree

    [CF468D]Tree 题目大意: ​ 一棵\(n(n\le10^5)\)个编号为\(1\sim n\)的点的带边权的树,求一个排列\(p_{1\sim n}\),使\(\sum dis(i,p_i ...

  4. 「题解」「CF468D」树中的配对

    目录 题目大意 思路 源代码 本博客除代码之外,来自 skylee 大佬. 题目大意 一棵\(n(n\le10^5)\)个编号为\(1\sim n\)的点的带边权的树,求一个排列\(p_{1\sim ...

随机推荐

  1. 在Arch上使用Fcitx5

    目录 卸载Fcitx4 安装Fcitx5 配置 修改环境变量 系统登陆后默认启动Fcitx5输入法 配置主题 最终使用效果 参考文档 我是一个Arch+KDE的用户,所以下面的方法可能不适合所有的Li ...

  2. pytorch(12)ContainersAndAlexNet

    containers graph LR A["Containers"] --> B["nn.Sequetial"] B["nn.Sequetia ...

  3. 致被职场PUA的打工人

    作为打工人,除了每天面对着各种繁琐的工作,还要被动接受上级或多或少的PUA,实在是难上加难,甚至有人想不开而自杀.网络上最近流行了一个词:职场PUA,赋予了这种现象一个正式的名字. 职场PUA指的是职 ...

  4. 【测试技术分享】在Linux下安装Python3

    导语:Python在linux环境下没有安装包,同时很多系统没有Python环境,即使有Python环境也是Python2.x,顺应时代,现在开始进行安装Python3的教程. 一.安装依赖 sudo ...

  5. FreeBSD pkg安装软件时出现创建用户失败解决

    问题示例:[1/1] Installing package...===> Creating groups.Creating group 'package' with gid '000'.===& ...

  6. Apache配置 4.访问日志

    (1)介绍 访问日志作用很大,不仅可以记录网站的访问情况,还可以在网站有异常发生时帮助我们定位问题. (2)配置 # vi /usr/local/apache2.4/conf/extra/httpd- ...

  7. java中常见的内存泄露的例子

    JAVA 中的内存泄露     Java中的内存泄露,广义并通俗的说,就是:不再会被使用的对象的内存不能被回收,就是内存泄露.     Java中的内存泄露与C++中的表现有所不同.     在C++ ...

  8. C语言数组寻址

    C语言数组 数组的定义 数组是用来存放数据类型相同且逻辑意义相同的数据 数组的大小 数组的大小不能是变量,必须是常量或者常量表达式,常量表达式由编译器编译时自动求值. 也可以不指定数组大小,但必须对数 ...

  9. Ubuntu18.04美化(Mac OS主题) 美化小白专用

    本文主要针对第一次接触Ubuntu美化的童鞋们,有些啰嗦的地方大神勿喷 先上效果图 首先安装神器 gnome-tweak-tool 开启一个终端,输入 sudo apt install gnome-t ...

  10. springboot的yml中的bruid没有提示

    解决方案: springboot的yml中的bruid没有提示只要在maven加上:druid-spring-boot-starter(注意版本的统一,否则可能会冲突) 效果图: