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;转眼就在硬件工程师的岗位上工作了九…

用JAI实现对TIF(TIFF)格式图片的合并

用JAI实现对TIF(TIFF)格式图片的合并 方法一: import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; import javax.media.jai.JAI; import javax.media.jai.RenderedOp; import com.…

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;面试官主…

2018 Machine Learning

2018/8/13 线性模型(西瓜书P53~P73)Optimizerhttps://blog.csdn.net/u012151283/article/details/781549172018/8/15 SVM(西瓜书)2018/8/16 面试题 https://www.cnblogs.com/zuochongyan/p/5407053.html熵、联合熵、条件熵、交叉熵与相对熵 &#xff1f;&#xff1f;归一化方法…

考研失败了,怎么办?

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

10月28号日志

匆匆忙忙而来&#xff0c;怀着梦想、怀着希望来到苏州这个地方。想用自己在校学的知识来改变自己的命运&#xff0c;我空空而来想满载而归。在这一段的时间里&#xff0c;我深深感受到了同学情深&#xff0c;深似海。老师恩重重如山。在长生果科技有限公司工作已将近两个月了的…

在php中怎么用js跳转页面跳转,在php中怎么用redirect实现页面跳转?

1、thinkPHP 的Action类的redirect方法可以实现页面的重定向功能&#xff0c;redirect 重定向的通用语法为&#xff1a;edirect(url,paramsarray(),delay0,msg) // 跳转到 edit 操作 $this->redirect(edit)。2、// 跳转到 UserAction下的edit 操作 this->redirect(User/…

[BZOJ 4025] 二分图

题目传送-BZOJ4025 题意&#xff1a; 有一张\(n\)个节点的无向图,其中边\(i\)在\(s_i\)出现,\(e_i\)结束,并连接着节点\(x,y\). 并保证\(s_i < e_i \le T\),要求对于每个时间\(t\le T\)输出此时的图是否是二分图。\(n\le100000,m\le200000,T\le100000\) 题解&#xff1a; 这…

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

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

传360以原彩虹QQ研发团队为班底拟强推IM

据知情人士透露&#xff0c;奇虎360开发即时通讯工具IM软件已成定局&#xff0c;正式推出只是时间问题。同时&#xff0c;该知情人还透露&#xff0c;目前负责360公司即时通讯软件项 目的核心班底正是51.com原“彩虹QQ”&#xff08;51.com对外官方产品名称为“彩虹显IP辅助软件…

linux无法安装php-fpm,Linux下的php-fpm相关问题解决

今天搭建LNMP环境时,在安装PHP编译的时候出现了问题,首先在解压安装包后配置检测环境./configure --prefix/usr/local/php \--with-gd \--enable-gd-native-ttf \--enable-mysqlnd \--with-mysqlmysqlnd \--with-pdo-mysqlmysqlnd \--with-openssl \--enable-mbstring \--enabl…