JZOJ 5776. 【NOIP2008模拟】小x游世界树

Description

小x得到了一个(不可靠的)小道消息,传说中的神岛阿瓦隆在格陵兰海的某处,据说那里埋藏着亚瑟王的宝藏,这引起了小x的好奇,但当他想前往阿瓦隆时发现那里只有圣诞节时才能到达,然而现在已经春天了,不甘心的他将自己的目的地改成了世界树,他耗费了大量的时间,终于将自己传送到了世界树下。世界树是一棵非常巨大的树,它有着许许多多的枝条以及节点,每个节点上都有一个平台。好不容易来到传说中的世界树下,小x当然要爬上去看看风景。小x每经过一条边都会耗费体力值。然而世界树之主想给他弄(gáo)些(dǐan)麻(shì)烦(qíng),于是他在每条边上都设了一个魔法阵,当小x踏上那条边时会被传送回根节点,魔法阵只生效一次。这岂不是要累死小x?幸运的是,每个平台上都有无数个加速器,这些加速器可以让小x在当前节点所连的边上耗费的体力值减少,不同平台的加速器性能不一定相同,但同一个平台的加速器性能绝对相同。世界树之主给了小x一次“换根”的机会,他可以将世界树的任何一个节点变为根,但所有的边都不能改变。小x想问你,将根换为哪个节点能使小x爬到世界树上的每个节点耗费的体力值和最少。默认编号为1的点为初始根。

Input

第一行一个数n,表示有n个节点。
第二行n个数ai,表示每个平台上的加速器的性能。
第三至n+1行,每行三个数bi,ci,di分别表示这条无向边的起点,终点与耗费的能量值

Output

第一行一个数,表示要换成的节点,如果有多个点为根时耗费的体力值都最小,则输出编号最小的那个。如果保持为1是最优的,就输出1。
         第二行一个数,表示最小耗费的体力值。

Sample Input

4
2 1 3 3
1 2 3
1 3 4
2 4 6

Sample Output

1
9

Data Constraint

对于20%的数据:n<=100
对于40%的数据:n<=1000
对于60%的数据:n<=8000
对于80%的数据:n<=100000
对于100%的数据:0<n<=700000;ai<=1000;1<=bi,ci<=n;di<=1000。
数据保证一个点的加速器性能绝对小于等于它的所有的边所耗费的能量,保证所有节点都可以到达,保证没有数据与样例相同。

Hint

提示:
样例解释:
如果以第一个点为根,则需要耗费0(到1)+1(到2)+2(到3)+6(到4)=9的能量值。
如果以第二个点为根,则需要耗费2(到1)+0(到2)+4(到3)+5(到4)=11的能量值。
如果以第三个点为根,则需要耗费1(到1)+2(到2)+0(到3)+7(到4)=10的能量值。
如果以第四个点为根,则需要耗费5(到1)+3(到2)+7(到3)+0(到4)=15的能量值。
很明显以第一个点为根是最优的。
做法:其实并不是每个点都要建一次树,我们可以在一个点为整棵树的根节点时,以它的答案来更新它的儿子节点的答案,这样实际上只会涉及一条边贡献的改变。
代码如下:
 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdio>
 4 #define LL long long
 5 #define N 1000007
 6 using namespace std;
 7 struct edge
 8 {
 9     LL to, next, w;
10 }e[N * 2];
11 LL zs[N], n, a[N], ls[N * 2], ans, root, site, cnt;
12 bool v[N];    
13 
14 void add(LL x, LL y, LL z)
15 {
16     e[++cnt].to = y;
17     e[cnt].next = ls[x];
18     e[cnt].w = z;
19     ls[x] = cnt;
20 }
21 
22 void dfs(LL x, LL sum)
23 {
24     root += sum;
25     for (int i = ls[x]; i; i = e[i].next)
26     {
27         if (v[e[i].to])    continue;
28         v[e[i].to] = 1;
29         dfs(e[i].to, sum + (e[i].w - a[x]));
30         zs[x] += zs[e[i].to];
31     }
32     zs[x]++;
33 }
34 
35 void find(LL x, LL sum)
36 {
37     if (sum < ans)
38     {
39         ans = sum;
40         site = x;
41     }
42     else if (sum == ans)    site = min(site, x);
43     for (int i = ls[x]; i; i = e[i].next)
44     {
45         if (v[e[i].to])    continue;
46         v[e[i].to] = 1;
47         find(e[i].to, sum + (n - zs[e[i].to]) * (e[i].w - a[e[i].to])- zs[e[i].to] * (e[i].w - a[x]));
48     }
49 }
50 
51 int main()
52 {
53     freopen("yggdrasil.in", "r", stdin);
54     freopen("yggdrasil.out", "w", stdout);
55     scanf("%lld", &n);
56     for (int i = 1; i <= n; i++)
57         scanf("%lld", &a[i]);
58     for (int i = 1; i <= n - 1; i++)
59     {
60         LL x, y, z;
61         scanf("%lld%lld%lld", &x, &y, &z);
62         add(x, y, z);
63         add(y, x, z);
64     }
65     v[1] = 1;
66     dfs(1, 0);
67     ans = root;
68     site = 1;
69     memset(v, 0, sizeof(v));
70     v[1] = 1;
71     find(1, root);
72     printf("%lld\n", site);
73     printf("%lld", ans);
74 }
View Code

 

转载于:https://www.cnblogs.com/traveller-ly/p/9461936.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/465282.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL Server 2005中的分区表(一):什么是分区表?为什么要用分区表?如何创建分区表?...

如果你的数据库中某一个表中的数据满足以下几个条件&#xff0c;那么你就要考虑创建分区表了。 1、数据库中某个表中的数据很多。很多是什么概念&#xff1f;一万条&#xff1f;两万条&#xff1f;还是十万条、一百万条&#xff1f;这个&#xff0c;我觉得是仁者见仁、智者见智…

java图形界面颜色随机变换,JavaScript实现鼠标移入随机变换颜色

大家好&#xff01;今天分享一个在 JavaScript中&#xff0c;实现一个鼠标移入可以随机变换颜色。/* 这里定义一下div(块元素)已下span 标签的宽.高.边框线以及边框线的颜色*/span{display: block;width: 80px;height: 80px;border: 1px solid #000000;float: left;}var adocum…

Vscode 用Filter Line看日志,很爽

因为某种原因&#xff0c;我抛弃了Notepad然后一直没有找到一个比较好的日志查看软件&#xff0c;最近发现Vscode里面的这个插件不错&#xff0c;给大家推荐一下。中文详情链接&#xff1a;https://everettjf.github.io/2018/07/03/vscode-extension-filter-line/推荐阅读&…

zblog php 七牛缩略图,zblog中Gravatar头像不显示解决方法

解决zblog博客Gravatar头像不显示方法一第一个&#xff0c;解决zblog博客Gravatar头像不显示解决方法是对其进行修复操作。造成不显示的原因主要是Gravatar头像地址错误。所以&#xff0c;我们需要对头像地址进行更改。1、进入自己的博客后台。2、找到现在使用的主题模板中的&a…

SpringCloud学习--微服务架构

目录 微服务架构快速指南 SOA Dubbo Spring Cloud Dubbo与SpringCloud对比 微服务(Microservice)架构快速指南 什么是软件架构?    软件架构是一个包含各种组织的系统组织&#xff0c;这些组件包括 Web服务器, 应用服务器, 数据库,存储, 通讯层), 它们彼此或和环境存在关系…

工作九年的硬件工程师,想对我们说些什么?

△向上生长, TO BE TO UP. 10万工程师的成长充电站△作者&#xff1a;徐新文&#xff0c;排版&#xff1a;晓宇微信公众号&#xff1a;芯片之家&#xff08;ID&#xff1a;chiphome-dy&#xff09;时光荏苒&#xff0c;岁月如梭&#xff0c;转眼就在硬件工程师的岗位上工作了九…

StringBuffer/StringBuilder/String的区别

1、在执行速度上&#xff1a;Stringbuilder->Stringbuffer->String 2、String是字符串常量 Stringbuffer是字符串变量 Stringbuilder是字符串变量 有可能我们会疑惑String怎么是字符串变量。看以下代码&#xff1a; String str adc&#xff1b; str str “ef”&#x…

你知道kernel version的实现原理和细节吗

引言kernel 启动时通常会看到下面第二行信息的内容&#xff0c;它们代表了当前 kernel 的版本、编译工具版本、编译环境等信息。Booting Linux on physical CPU 0x0 Linux version 5.4.124 (funnyfunny) (gcc version 6.5.0 (Linaro GCC 6.5-2018.12)) #30 SMP Sat Sep 11 11:1…

Android 为你的应用程序添加快捷方式【优先级高的快捷方式】

有人会说&#xff0c;快捷方式&#xff0c;不是安装完应用程序后&#xff0c;长按应用程序的ICON然后将它拖到桌面上不就行了吗&#xff1f;没错&#xff0c;这样是一种方法&#xff0c;但这种方法有一个缺点&#xff0c;看图吧&#xff1a; 如上图&#xff0c;如果我们长按桌面…

icinga2 php模块,在Ubuntu 18.04系统上安装Icinga2监视工具的方法

本文介绍在Ubuntu 18.04系统上安装Icinga2监视工具的方法&#xff0c;使用Icinga 2可以监控&#xff1a;服务器资源、网络服务、网络设备。简介Icinga 2是一个开源&#xff0c;可扩展和可扩展的监视工具&#xff0c;可检查网络资源的可用性&#xff0c;通知用户中断&#xff0c…

面试官问:malloc(0)时程序会返回什么?

今天跟大家找了篇文章&#xff0c;主要是一个面试中的有趣问题&#xff0c;其实有些问题在开发中没有遇到过会很难回答出来&#xff0c;如果在面试过程中回答正确&#xff0c;皆大欢喜&#xff0c;拿到offer的概率更大&#xff1b;回答不出来也不要信口开河&#xff0c;面试官主…

考研失败了,怎么办?

有读者提到这个问题&#xff0c;顺带回答下。我没有考研过&#xff0c;但是身边有很多研究生和博士&#xff0c;额&#xff0c;还有很多海外留学的博士。前天我们有外部厂商来公司讨论合作&#xff0c;领导让我跟着一起介绍项目&#xff0c;对方的人问了一句&#xff1a;“你们…

晒一波工程师的工位,你喜欢哪种?

程序员的圈子啊那是十分神秘&#xff0c;又令人着迷的。每天的工作就是对着电脑&#xff0c;那他们的工作是如何的呢&#xff1f;我们来品一品&#xff08;PS&#xff1a;后面奉上各位大佬的桌面&#xff0c;别走开哦&#xff09;↓↓↓最最常见的普通版&#xff1a;升级版&…

彻底搞懂系统调用

在应用程序开发过程中经常会进行IO设备的操作&#xff0c;比如磁盘的读写&#xff0c;网卡的读写&#xff0c;键盘&#xff0c;鼠标的读入等&#xff0c;大多数应用开发人员使用高级语言进行开发&#xff0c;例如C&#xff0c;C&#xff0c;java&#xff0c;python等&#xff0…

Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录

0、目录 整体架构目录&#xff1a;ASP.NET Core分布式项目实战-目录 k8s架构目录&#xff1a;Kubernetes(k8s)集群部署&#xff08;k8s企业级Docker容器集群管理&#xff09;系列目录 一、感谢 在此感谢.net core社区的帮助。感谢。 二、系列部署目录 0、部署环境规划 1、自签T…

每天都用手机,你对麦克风了解吗?

简 介&#xff1a; 通过对于实际驻极体MIC进行拆解&#xff0c;看到其中的结构&#xff0c;对比起工作原理&#xff0c;实在令人难以想象它的工作机制是可行的&#xff0c;尽管现在它已经广泛应用在周围很多电子设备中。关键词&#xff1a; 驻极体&#xff0c;MIC01 驻极体话筒…

好了,我不想回深圳了~

国庆节算长假&#xff0c;一共七天&#xff0c;高速免费。如果一个人&#xff0c;待在家里睡上七天&#xff0c;可能我在第二天就会特别无聊&#xff0c;想找事情做&#xff0c;因为国庆离开深圳的人很多&#xff0c;我曾经有一次放假去球场打球&#xff0c;结果很失落&#xf…

开源微信管家平台——JeeWx 捷微4.0 微服务版本发布,全新架构,全新UI,提供强大的图文编辑器...

JeeWx捷微4.0 微服务版本发布^_^ 换代产品&#xff08;全新架构&#xff0c;全新UI&#xff0c;提供强大的图文编辑器&#xff09; JEEWX 从4.0版本开始&#xff0c;技术架构全新换代&#xff0c;采用微服务架构&#xff0c;插件式开发&#xff0c;每个业务模块都是独立的JAR…

手把手教用XNA开发winphone7游戏(三)

XNA Game Studio 游戏循环 在这部分中您将重点两剩余部分的游戏 — — 重写Update 和 Draw 功能。有些大大可能看过相关微软的训练包&#xff0c;我这里主要是帮一些初学者。希望各位大大包含&#xff0c;毕竟文章发出来还是有工作量的。大家觉得有用就好&#xff0c;要是没有耽…

我的代码很好,不需要写注释

作者 | Sheetal 译者 | 弯月 责编 | 王晓曼 有时候&#xff0c;我们会写一些非常有创意的注释&#xff0c;而有些注释确实让人不得不佩服 程序员的想象力。看到下面这些注释&#xff0c;相信每个人都会捧腹大笑。【1】#想了解递归&#xff0c;请参见文件末尾 . .&#xff08;代…