题意:

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

 

思路:

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

对于每一条边 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. 如何读写拥有命名空间xmlns 属性的Xml文件(C#实现)

    我们在进行C#项目Xml读写开发时经常遇到一些读写问题,今天我要介绍的是遇到多个命名空间xmlns属性时如何读写此类文件. 比如下面这个Xml文件: <?xml version="1. ...

  2. Win命令行切换Python版本

    目录 安装2.x 和 3.x 的python 设置系统环境变量 pip的使用 参考 安装2.x 和 3.x 的python 我这里使用anaconda来安装两个版本的python包. conda cr ...

  3. 在不使用外延层的同轴半绝缘衬底材料上制作4H-SIC横向双重注入金属氧化物半导体场效应晶体管

    在不使用外延层的同轴半绝缘衬底材料上制作4H-SIC横向双重注入金属氧化物半导体场效应晶体管 杂志:日本应用物理杂志   在不使用外延层在同轴的半绝缘SIC衬底上制作4H-SIC横向双重注入金属氧化物 ...

  4. 浅谈Dotnet的数据定位和匹配

    Dotnet里,数据定位和匹配的相关编程现在变得很舒服.   最近项目紧,还要不停出差. 所以,写个短点的.最近经常用到的内容:数据定位和匹配.   数据定位 假设我们有这样一个数组: var arr ...

  5. 从Android手机的抢红包插件说起

    前语 最近,Android手机上的手机管家更新了新版本,提供了红包闹钟功能,只要有微信红包或者QQ红包,就会自动提醒.恰逢最近又在做UI自动化的工作,使用到UI Automator框架.几行代码,就可 ...

  6. 深入理解Java并发框架AQS系列(一):线程

    深入理解Java并发框架AQS系列(一):线程 深入理解Java并发框架AQS系列(二):AQS框架简介及锁概念 一.概述 1.1.前言 重剑无锋,大巧不工 读j.u.c包下的源码,永远无法绕开的经典 ...

  7. ES6学习笔记(1)- 块级作用域

    1. var声明变量和变量提升(Hoisting)机制的问题 在JS中通过var关键字声明的变量,无论在函数作用域中亦或是全局作用域中,都会被当成当前作用域顶部的变量,和就是所谓的提升机制(Hoist ...

  8. Python中面向对象的概念

    1.语言的分类 1)面向机器 抽象成机器指令,机器容易理解.代表:汇编语言. 2)面向过程 做一件事,排除步骤,第一步做什么,第二步做什么,如果出现A问题,做什么处理,出现b问题,做什么处理.问题规模 ...

  9. 操作系统实验(一)-Shell编程

    操作系统实验:Shell编程 emmmmm,实验前老师发了一份实验说明,里面有教怎么配置虚拟机Ubuntu.这里就不做过多叙述,需要说明的是,kali和ubuntu都可以以shell运行这个C语言程序 ...

  10. 下载微软pdb符号文件

    使用symchk.exe  逐层下载c:\windows\system32下的pdb文件 symchk /r c:\windows\system32 /s SRV*D:\mypdb\*http://m ...