Description

话说宁波市的中小学生在镇海中学参加计算机程序设计比赛,比赛之余,他们在镇海中学的各个景点参观。镇海中学共有n个景点,每个景点均有若干学生正在参观。这n个景点以自然数1至n编号,每两个景点的编号均不同。每两个景点之间有且只有一条路径。选择哪个景点集中的学生,才能使所有学生走过的路径之和最小呢?

如果存在多个解,则输出距离1最近的那个点,可以证明答案唯一

Input

输入文件center.in中有若干行:

第一行只有一个正整数n,表示景点数。

第二行有n个1至1000间的整数,这n个整数间互相以一个空格分隔。其中第i个整数表示第i个景点处的学生数。

第三行至第n+1行,每行有三个整数I,j,k,表示景点i和景点j之间有一条长尾k的路径直接连接。其中i<>j,1≤i≤n,1≤j≤n;1≤k≤1000。

Output

输出文件center.out中有二行;

第一行只有一个整数i,表示在第i个景点处集中时,所有学生走过的路径之和最短。

第二行也只有一个整数,表示所有学生走过的路径之和的最小值。

Data Constraint

所有的数据均随机生成,且满足:

30%的数据,1≤n≤200。

60%的数据,1≤n≤3000。

100%的数据,1≤n≤100000。

Solution

这题我没想到什么好的方法,主要是靠树形DP推出每个点为集中点时的代价。

首先,我们需要一个初始值,所以我们先暴力将1为集合点时的代价给求出来。

然后我们处理它的子节点





不难发现,子节点与原根节点的连边是条很重要的边

以该子节点为根的子树的每一个节点到集中点的贡献都减少了该边长度,而其他的边都增加了该边长度

所以我们就可以先在第一次暴力求答案的时候先求出几个重要的数

首先我们设tree[i]表示以i为根的子树的学生数

设f[i]表示该点到集中点的贡献

一开始我们求出了f[1],而其他的点都可以推出来,最后求个最小值即可

Code

#include <cstdio>
#define ll long long
using namespace std;
int len,n,a,b,c,i,ans,go[1000001],to[1000001],last[1000001],w[1000001],tree[1000001],m[1000001];
ll f[1000001];
void make(int x,int y,int z)
{
go[++len]=y;to[len]=last[x];w[len]=z;last[x]=len;
}
void dg(int x,int fa,ll s1)
{
int k=last[x];
tree[x]=m[x];
f[x]=m[x]*s1;
while (k)
{
if (go[k]!=fa)
{
dg(go[k],x,s1+w[k]);
tree[x]+=tree[go[k]];
f[x]+=f[go[k]];
}
k=to[k];
}
}
void dfs(int x,int fa,ll s)
{
if (x!=1)
{
f[x]=f[fa]+(tree[1]-tree[x])*s-tree[x]*s;
if (f[x]<f[ans]) ans=x;
}
int k=last[x];
while (k)
{
if (go[k]!=fa) dfs(go[k],x,w[k]);
k=to[k];
}
}
int main()
{
scanf("%d",&n);
for (i=1;i<=n;i++)
{
scanf("%d",&m[i]);
}
for (i=1;i<n;i++)
{
scanf("%d%d%d",&a,&b,&c);
make(a,b,c);make(b,a,c);
}
dg(1,0,0);
ans=1;
dfs(1,0,0);
printf("%d\n%lld",ans,f[ans]);
}

jzoj1497. 景点中心的更多相关文章

  1. JZOJ2020年8月11日提高组T4 景点中心

    JZOJ2020年8月11日提高组T4 景点中心 题目 Description 话说宁波市的中小学生在镇海中学参加计算机程序设计比赛,比赛之余,他们在镇海中学的各个景点参观.镇海中学共有n个景点,每个 ...

  2. 天气预报API(二):全球城市、景点代码列表(“旧编码”)

    说明 2016-12-10 补充 (后来)偶然发现中国天气网已经有城市ID列表的网页...还发现城市编码有两种,暂且称中国天气网这些编码为旧标准"旧编码"的特征是 9个字符长度; ...

  3. 动态规划:树形DP

    典型例题有三道: 没有上司的舞会 选课 景点中心 我们可以把动态规划的状态和转移描述成DAG 对于有根树来说,如果我们规定边的方向由父节点指向叶子节点 或者是由叶子节点指向父节点(奇葩) 那么它也是一 ...

  4. 旅游景点信息API接口大全

    1.分享数据:“http://www.shareapi.cn/docs/api/id/127”,免费,次数1000次 返回JSON示例 { "SceneryID":10224,/* ...

  5. .net 分布式架构之配置中心

    开源QQ群: .net 开源基础服务  238543768 开源地址: http://git.oschina.net/chejiangyi/Dyd.BaseService.ConfigManager ...

  6. Consul-template的简单应用:配置中心,服务发现与健康监测

    简介 Consul-template是Consul的一个方扩展工具,通过监听Consul中的数据可以动态修改一些配置文件,大家比较热衷于应用在Nginx,HAProxy上动态配置健康状态下的客户端反向 ...

  7. BPM流程中心解决方案分享

    一.需求分析 在过去办公自动化的浪潮中,很多企业已经实施了OA流程,但随着客户的发展和对流程管理的越来越重视, 客户对流程应用需求越来越深 入,您可能面临以下需求: 1.流程功能不能满足需求,包括流程 ...

  8. IM 去中心化概念模型与架构设计

    今天打算写写关于 IM 去中心化涉及的架构模型变化和设计思路,去中心化的概念就是说用户的访问不是集中在一个数据中心,这里的去中心是针对数据中心而言的. 站在这个角度而言,实际上并非所有的业务都能做去中 ...

  9. Android 手机卫士3--设置中心

    1.要点击九宫格中的条目,需要注册点击事件 // 注册九宫格单个条目的点击事件 gv_home.setOnItemClickListener(new OnItemClickListener() { / ...

随机推荐

  1. vue keep-alive 不生效和多级(三级以上)缓存失败

    vue keep-alive https://cn.vuejs.org/v2/api/#keep-alive keep-alive 不生效的可能原因 如果安装官方的写法,已经正常完成keep-aliv ...

  2. 通过http、https域名访问静态网页、nginx配置负载均衡(nginx配置)

    很多场景下需要可以通过浏览器访问静态网页,不想把服务器ip地址直接暴露出来,通过nginx可以解决这个问题. 实现http域名访问静态网页 1.域名解析配置(本文都是以阿里云为例,其他平台,操作步骤类 ...

  3. 记好这 24 个 ES6 方法,用来解决实际开发的 JS 问题

    本文主要介绍 24 中 es6 方法,这些方法都挺实用的,本本请记好,时不时翻出来看看. 1.如何隐藏所有指定的元素 const hide = (el) => Array.from(el).fo ...

  4. [Hadoop] mapper数量的控制

    确定map任务数时依次优先参考如下几个原则: 1)      每个map任务使用的内存不超过800M,尽量在500M以下 比如处理256MB数据需要的时间为10分钟,内存为800MB,此时如果处理12 ...

  5. pygame绘制背景

    import pygame pygame.init() screen = pygame.display.set_mode((640,480)) # ------- background ------- ...

  6. [C#] (原创)一步一步教你自定义控件——02,ScrollBar(滚动条)

    一.前言 技术没有先进与落后,只有合适与不合适. 本篇的自定义控件是:滚动条(ScollBar). 我们可以在网上看到很多自定义的滚动条控件,它们大都是使用UserControl去做,即至少使用一个P ...

  7. 你们要的MyCat实现MySQL分库分表来了

    ❝ 借助MyCat来实现MySQL的分库分表落地,没有实现过的,或者没了解过的可以看看 ❞ 前言 在之前写过一篇关于mysql分库分表的文章,那篇文章只是给大家提供了一个思路,但是回复下面有很多说是细 ...

  8. JUC----04

    目录 1.1 读写问题 1.1 读写问题 ReadWriteLockUnsafeDemo: public class ReadWriteLockUnsafeDemo { // TODO: 2020/7 ...

  9. C++ Templates(1.3 多模板参数 Multiple Template Parameters)

    返回完整目录 目录 1.3 多模板参数 Multiple Template Parameters 1.3.1 为返回类型设置模板参数参数 Template Parameters for Return ...

  10. 团队作业4:第五篇Scrum冲刺博客(歪瑞古德小队)

    目录 一.Daily Scrum Meeting 1.1 会议照片 1.2 项目进展 二.项目燃尽图 三.签入记录 3.1 代码/文档签入记录 3.2 Code Review 记录 3.3 issue ...