Parametric MST(贪心)
Parametric MST
[Link](Problem - F - Codeforces)
题意
给你一个nnn个结点的完全图,第iii个点的权重为aia_iai,对于任意两个点的边权wi,j(t)=aiaj+t(ai+aj)w_{i,j}(t)=a_ia_j+t(a_i+a_j)wi,j(t)=aiaj+t(ai+aj),其中ttt是任意一个实数,f(t)是最小生成树的花费f(t)是最小生成树的花费f(t)是最小生成树的花费,问你f(t)f(t)f(t)最小可能是多少。
思路
首先将aaa从小到大排序,设sss为aaa的前缀和,对于ttt非常大,则权值取决于(ai+aj)t(a_i+a_j)t(ai+aj)t,则此时权值为(a1∗(n−1)+sn−s1)t(a_1*(n-1)+s_n-s_1)t(a1∗(n−1)+sn−s1)t,若(a1∗(n−1)+sn−s1)>0(a_1*(n-1)+s_n-s_1)>0(a1∗(n−1)+sn−s1)>0则为INFINFINF,同理若ttt是非常小的负数,若(a1∗(n−1)+sn−s1)<0(a_1*(n-1)+s_n-s_1)<0(a1∗(n−1)+sn−s1)<0则为INFINFINF
其它情况我们观察一下式子wi,j(t)=aiaj+t(ai+aj)=(ai+t)(aj+t)−t2w_{i,j}(t)=a_ia_j+t(a_i+a_j)=(a_i+t)(a_j+t)-t^2wi,j(t)=aiaj+t(ai+aj)=(ai+t)(aj+t)−t2,令bi=ai+tb_i=a_i+tbi=ai+t,则权值为wi,j(t)=bibj−t2w_{i,j}(t)=b_ib_j-t^2wi,j(t)=bibj−t2,令wi,j=bibjw_{i,j}=b_ib_jwi,j=bibj则f(t)=mst−(n−1)t2f(t)=mst-(n-1)t^2f(t)=mst−(n−1)t2,对于所有的对于任意一个ttt,一定满足[1,i]bi<0[1,i]\ b_i<0[1,i] bi<0,[i+1,n]bi>0[i+1,n]\ b_i>0[i+1,n] bi>0,对于bi<0b_i<0bi<0我们将其和max(bi)max(b_i)max(bi)相连,对于bi>0b_i>0bi>0我们将其和min(bi)min(b_i)min(bi)相连,这样求出来的就是最小值,通过枚举ttt求解即可
Code
#include <bits/stdc++.h>
#define x first
#define y second
#define debug(x) cout<<#x<<":"<<x<<endl;
using namespace std;
typedef long double ld;
typedef long long LL;
typedef pair<int, int> PII;
typedef pair<double, double> PDD;
typedef unsigned long long ULL;
const int N = 2e5 + 10, M = 2 * N, INF = 0x3f3f3f3f, mod = 1e9 + 7;
const double eps = 1e-8, pi = acos(-1), inf = 1e20;
int dx[] = {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1};
int h[N], e[M], ne[M], w[M], idx;
void add(int a, int b, int v = 0) {e[idx] = b, w[idx] = v, ne[idx] = h[a], h[a] = idx ++;
}
int n, m, k;
LL a[N], sum[N];
int main() {ios::sync_with_stdio(false), cin.tie(0);int T;cin >> T;while (T -- ) {cin >> n;for (int i = 1; i <= n; i ++) cin >> a[i];sort(a + 1, a + 1 + n);for (int i = 1; i <= n; i ++) sum[i] = sum[i - 1] + a[i];if (sum[n] - sum[1] + a[1] * (n - 1) > 0 || sum[n - 1] + a[n] * (n - 1) < 0) {cout << "INF\n";continue ;}LL res = -1e18;for (int i = 1; i <= n; i ++) {LL t = -a[i];LL mx = a[n] + t, mn = a[1] + t;LL ls = sum[i] + i * t, rs = sum[n] - sum[i] + (n - i) * t;res = max(res, ls * mx + rs * mn - mn * mx - (n - 1) * t * t);}cout << res << '\n'; }return 0;
}
Parametric MST(贪心)相关推荐
- Codeforces.888G.Xor-MST(Borůvka算法求MST 贪心 Trie)
题目链接 \(Description\) 有一张\(n\)个点的完全图,每个点的权值为\(a_i\),两个点之间的边权为\(a_i\ xor\ a_j\).求该图的最小生成树. \(n\leq2*10 ...
- CodeTON Round 1 (Div. 1 + Div. 2, Rated, Prizes)
A Good Pairs You are given an array a1,a2,-,ana_1,a_2,-,a_na1,a2,-,an of positive integers. A goo ...
- 算法设计与分析第3章 贪心算法
第4章 贪心算法 贪心算法总是作出在当前看来最好的选择.也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择. 贪心算法的基本要素 1.贪心选择性质 所谓贪心选择性质是指所 ...
- HDU 1257 - 最少拦截系统 ( LIS / 贪心 )
题目 现在有一种拦截系统,第一发拦截可以是任意高度,但是之后的拦截高度不能比上次高.为了拦截下所有的炮弹,最少需要准备几套拦截系统? 思路 可能是语文没学好吧,一开始被题意卡了一下.(而且题目连数据范 ...
- FZU 2087 统计树边【MST相关】
Problem 2087 统计树边 Accept: 212 Submit: 651 Time Limit: 1000 mSec Memory Limit : 32768 KB Prob ...
- 最小生成树(MST)
最小生成树 包含所有N个节点,N-1条边 没有环 权值之和最小 下图表示一最小生成树,原图于其后面. MST=6 原图 Prim算法 是一种贪心算法,从一个节点出发,找最小边的节点加入. #inclu ...
- BZOJ 1821: [JSOI2010]Group 部落划分 Group【MST】
1821: [JSOI2010]Group 部落划分 Group Time Limit: 10 Sec Memory Limit: 64 MB Description 聪聪研究发现,荒岛野人总是过着群 ...
- 算法设计与分析【第七周】贪心算法 最优装载问题
最优装载问题 有一批集装箱要装上一艘载重量为c的轮船.其中,集装箱i的重量为Wi. 最优装载问题要求确定在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船. 另外,单源最短路径(Dijistra算 ...
- 并查集与贪心算法的应用之求解无向图的最小生成树
一,介绍 本文介绍使用Kruskal算法求解无向图的最小生成树.Kruskal是一个贪心算法,并且使用了并查集这种数据结构. 关于并查集的介绍,参考:数据结构--并查集的原理及实现 二,构造一个无向图 ...
最新文章
- PowerPoint中如何插入MP3歌曲
- querySelector querySelectorAll
- 把文本以图片的形式保存
- python3num='0123456789,num「:6:-1」=gt; '987'?「1:6:-1」为空
- 个人作业-Week2
- 深度学习(11)-- GAN
- r语言折线图_R语言基础入门视频教程——语法篇(完结)
- deferred initcalls与模块化
- 【贪心】【堆】Gym - 101485A - Assigning Workstations
- Json对象与Json字符串互转(四种转换方式)
- EXCEL 根据超链接直接显示图片
- 协议转换器的作用有哪些?
- WiFi、蓝牙、NFC哪家强?短距离无线通信技术对比分析
- 描写火车站场景_描写车站的优美句子
- 魔王逗勇者c语言编程软件,勇者逗魔王游戏下载-勇者逗魔王预约下载 v1.0.5-pc6手游...
- 炼石荣登“中国信创500强”榜单
- CTF-隐写术(六)
- python缩写月份单词_将python缩写的月份名称转换为全名
- 东南大学网安学院研究生毕业,就业如何?
- 关于UOS系统下打包安装使用的问题总结