AtCoder ABC 359 F 题解

ops/2024/9/25 23:24:51/

本题要看出性质并进行验证,程序难度低。(官方 Editorial 似乎没有写证明过程?难道是过于显而易见了吗…)

题意

给你一个数组 a a a,对于一棵 n n n 个节点的树 T T T d i d_i di 为每个节点的度,定义 f ( T ) = ∑ i = 1 n d i 2 a i f(T)=\sum_{i=1}^{n}d_i^2a_i f(T)=i=1ndi2ai。求 f ( T ) f(T) f(T) 的最小值。

性质

式子:如果 ∑ i = 1 n d i = 2 n − 2 \sum_{i=1}^{n}d_i=2n-2 i=1ndi=2n2,对于任意的 d d d,一定有合法的树满足条件。
证明:

  1. 首先先证明一棵树的度数和是 2 n − 2 2n-2 2n2 n n n 个节点的树有 n − 1 n-1 n1 条边,每条边会被两头的节点算两次度,所以度数和是 2 ( n − 1 ) 2(n-1) 2(n1)
  2. 接着我们证明可以构造出这样一棵树满足条件。先将 d d d 数组从大到小排序,我们先满足 d d d 大的节点。举 n = 10 n=10 n=10 的例子:在这里插入图片描述
    这样每次加完点后再在新的点上连边,直到后面的 d d d 都是 1 1 1,无需添加。在 d = 1 d=1 d=1 之前,每次都会加上至少一个叶子节点(除第一次是 d i d_i di 个之外,每次加 d i − 1 d_i-1 di1 个叶子节点),保证不会没有上一次新加的点可以用来连新的边。最终的点数一定是 n n n,否则不满足度数和为 2 n − 2 2n-2 2n2。算一下每次新增点数, ( d 1 + 1 ) + ( d 2 − 1 ) + ( d 3 − 1 ) . . . + ( d n − 1 ) = 2 n − 2 − ( n − 2 ) = n (d_1+1)+(d_2-1)+(d_3-1)...+(d_n-1)=2n-2-(n-2)=n (d1+1)+(d21)+(d31)...+(dn1)=2n2(n2)=n,也是对的。

思路

我们先将所有 d i d_i di 都设成 1 1 1,然后循环 n − 2 n-2 n2 次,每次选择一个使 f ( T ) f(T) f(T) 增加量最小的 d i d_i di 进行加 1 1 1,这里可以用 p r i o r i t y _ q u e u e priority\_queue priority_queue 找到最小的。

代码

#include<bits/stdc++.h>
using namespace std;
int n;
long long ans,a[200005],d[200005];
priority_queue<pair<long long,int>,vector<pair<long long,int> >,greater<pair<long long,int> > > q;
//first:如果将d[pos]加1会对f造成多少增加量  second:pos
int main(){cin>>n;for(int i=1;i<=n;i++) cin>>a[i];for(int i=1;i<=n;i++){d[i]=1;ans+=a[i];q.push(make_pair(3*a[i],i));}for(int i=1;i<=n-2;i++){pair<long long,int> p=q.top();q.pop();ans+=p.first;d[p.second]++;q.push(make_pair(((d[p.second]+1)*(d[p.second]+1)-d[p.second]*d[p.second])*a[p.second],p.second));}cout<<ans<<endl;return 0;
}

http://www.ppmy.cn/ops/105531.html

相关文章

125. 验证回文串

题目 见125. 验证回文串 解题思路 一看到回文子串&#xff0c;就用双指针来做。最开始我是用的最长回文子串的思路来做的。 后面写完发现不对。 最长回文子串是从从中心开始向两端扩散。而本题是求整个字符串是否为回文&#xff0c;如果用中心扩散&#xff0c;就算考虑了奇偶…

Spark框架

简介 带有流处理功能的批处理框架 spark系统架构 SQL RDD&#xff1a;spark中的一种数据结构 streaming MLlib graphX RDD

智慧公厕:城市公共卫生管理的新篇章‌@卓振思众

在快节奏的现代生活中&#xff0c;公共厕所作为城市基础设施的重要组成部分&#xff0c;其使用体验和管理效率直接影响着市民的生活质量与城市形象。随着科技的飞速发展&#xff0c;智慧公厕应运而生&#xff0c;它以一种全新的姿态&#xff0c;为城市公共卫生管理带来了前所未…

“三年级英语”暴增5亿搜索量?需求来了!附2个极品AI吸粉玩法!

家人们&#xff01;在英语细分领域&#xff0c;一直都是付费知识中的风口黄金大赛道。 而这两天“英语”这个关键词&#xff0c;在微信指数上的日搜索量突然猛增到5个亿。 这两天全网热词“三年级英语”&#xff0c;日环比搜索指数更是486.2%增长率&#xff0c;一天时间内就增…

CSS 指南

CSS 指南 1. 引言 CSS(层叠样式表)是一种用于描述HTML或XML文档样式的样式表语言。它允许开发者控制网页的布局、字体、颜色、间距等视觉方面,是网页设计和开发的重要组成部分。本文将提供一份全面的CSS指南,旨在帮助读者理解并掌握CSS的基础知识和高级技巧。 2. CSS基础…

Adobe主要产品及其简介

Adobe 是全球领先的数字媒体和创意软件公司&#xff0c;提供一系列广泛应用于设计、摄影、视频、网络开发等领域的产品。以下是 Adobe 的一些主要产品及其简介和相关资源&#xff1a;【rjqjf.com】 Adobe Photoshop 【rjqjf.com】 世界上最受欢迎的图像编辑软件&#xff0c;用…

sql92语句与sql99语法的区别

场景:测试sql92语句与sql99语法的区别 –创建测试表 CREATE table ypg_08161 as select ‘1’ as id ,‘one’ as c_name union all select ‘2’ as id ,‘two’ as c_name CREATE table ypg_08162 as select ‘1’ as id ,‘male’ as c_sex union all select ‘3’ as id …

【精选】基于Django的智能水果销售系统设计与实现

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…