【杭电多校2020】Total Eclipse【贪心】【并查集】

题意:nnn个点mmm条边的无向图,每个点有一个正点权,每次选择一个连通子图,将里面的权值都减111。求所有点权为000的最小步数。

T≤10,n≤105,m≤2×105T\leq 10,n\leq 10^5,m\leq2\times10^5T10,n105,m2×105

考虑一个贪心:每次一定选择一个极大的连通块。

感性理解很容易,还是证明一下:

假设一个极大连通块SSS,我偏不选,选择它的子连通块来覆盖整个SSS,答案严格更优。考虑两个连在一起的连通块T1,T2T_1,T_2T1,T2,选择T1∪T2,T1∩T2T_1\cup T_2,T_1\cap T_2T1T2,T1T2一定不比选T1,T2T_1,T_2T1,T2劣。因为选择的连通块覆盖了整个SSS,所以可以一步步合并出SSS(即任选一个与当前集合相邻的点,将覆盖它的集合与当前集合合并),答案不会更劣,矛盾。

对于一个连通块来说,一定是点按照权值从小到大被删。把操作顺序倒过来,就是把大的结点减小成和小的结点相同,然后一起删掉。

形式化地讲,就是把权值从大到小排序依次加入,并把全场的权值都减到当前权值。用并查集维护连通块个数即可。

复杂度O(nlog⁡n)O(n\log n)O(nlogn)

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cctype>
#include <algorithm>
#include <vector>
#define MAXN 100005
using namespace std;
typedef long long ll;
vector<int> e[MAXN];
int fa[MAXN];
inline int find(const int& x){return fa[x]==x? x:fa[x]=find(fa[x]);}
int a[MAXN],p[MAXN],vis[MAXN];
inline bool cmp(const int& x,const int& y){return a[x]>a[y];}
int main()
{int T;scanf("%d",&T);while (T--){int n,m;scanf("%d%d",&n,&m);for (int i=1;i<=n;i++) e[i].clear(),fa[i]=p[i]=i,vis[i]=0,scanf("%d",&a[i]);for (int i=1;i<=m;i++){int u,v;scanf("%d%d",&u,&v);e[u].push_back(v),e[v].push_back(u);}sort(p+1,p+n+1,cmp);int cur=1;ll ans=0;vis[p[1]]=1;for (int i=2;i<=n;i++){ans+=(ll)cur*(a[p[i-1]]-a[p[i]]);++cur;for (vector<int>::iterator it=e[p[i]].begin();it!=e[p[i]].end();++it){int u=p[i],v=*it;if (!vis[v]) continue;u=find(u),v=find(v);if (u!=v) fa[u]=v,--cur;}vis[p[i]]=1;}ans+=(ll)cur*a[p[n]];printf("%lld\n",ans);}return 0;
}

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

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

相关文章

Codeforces Round #725 (Div. 3) G. Gift Set 二分

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 有两种物品分别有x,yx,yx,y个&#xff0c;每次可以从一个拿出aaa个&#xff0c;另一个拿出bbb个分成一组&#xff0c;问最多能分成多少组。 思路&#xff1a; 这个题有一个显然的单调性&#xff0c;所以二…

长沙.NET技术社区·设计到实现

方案最终夭折回到一年前的四月初&#xff0c;也是这样一个气象更新&#xff0c;春意盎然的一年中最好的时光。 在长沙.NET技术圈中&#xff0c;有一个不知名的QQ群&#xff0c;叫做放肆.NET技术交流群&#xff08;群号&#xff1a;44329330&#xff09;&#xff0c;在这个群里面…

【杭电多校2020】Lead of Wisdom【搜索】【复杂度证明】

题意&#xff1a;nnn件物品&#xff0c;每种物品有一个种类tit_iti​&#xff0c;四个属性ai,bi,ci,dia_i,b_i,c_i,d_iai​,bi​,ci​,di​&#xff0c;每个种类最多选一件物品&#xff0c;求 (100∑ai)(100∑bi)(100∑ci)(100∑di)(100\sum a_i)(100\sum b_i)(100\sum c_i)(10…

Loj #6274. 数字 数位dp + 去重

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 考虑数位dpdpdp&#xff0c;设计状态f[pos][flag1][flag2][flag3][flag4]f[pos][flag1][flag2][flag3][flag4]f[pos][flag1][flag2][flag3][flag4]&#xff0c;其中flag1:x≥Lxflag2:y≤Rx…

微软发布 VS Code 容器化开发工具,大大简化物联网设备开发

近日&#xff08;北京时间 2019 年 7 月 9 日&#xff09;&#xff0c;微软宣布了 Azure IoT Tools for VS Code 的全新功能&#xff1a;通过在容器中封装编译器、设备 SDK 以及基本库&#xff0c;大大简化了设备交叉编译的工作量&#xff0c;使得嵌入式 Linux 设备&#xff08…

【杭电多校2020】Go Running【几何】【最小点覆盖】

题意&#xff1a;有一个数轴&#xff0c;若干人在某个时刻开始从某个点朝某个方向按111的速度走若干时间。已知nnn个条件&#xff0c;形如tit_iti​时刻xix_ixi​的位置有人&#xff0c;求最少可能的人数。 ∑n≤5105\sum n\leq 5\times 10^5∑n≤5105 画出 x−tx-tx−t二维平…

Codeforces Round #636 (Div. 3) F. Restore the Permutation by Sorted Segments 思维 + 暴力

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; n≤200n\le200n≤200 思路&#xff1a; 首先关注到rrr从[2,n][2,n][2,n]都出现一次&#xff0c;所以很明显最后一个位置只出现一次&#xff0c;但是这样倒着来不是很好做考虑正着来。 我们可以枚举111位置填…

.NET中生成动态验证码

NET中生成动态验证码验证码是图片上写上几个字&#xff0c;然后对这几个字做特殊处理&#xff0c;如扭曲、旋转、修改文字位置&#xff0c;然后加入一些线条&#xff0c;或加入一些特殊效果&#xff0c;使这些在人类能正常识别的同时&#xff0c;机器却很难识别出来&#xff0c…

【NOI2019】弹跳【二维线段树】【dijkstra】

题意&#xff1a;一个whw\times hwh的二维平面上有nnn个城市&#xff0c;有mmm个弹跳装置&#xff0c;第iii个可以花费tit_iti​的时间从城市pip_ipi​跳到矩形x∈[l,r],y∈[u,d]x\in [l,r],y\in[u,d]x∈[l,r],y∈[u,d]中的任意一个城市。求从111到其他每个城市的最小时间。 w,…

Codeforces Beta Round #51 D. Beautiful numbers 数位dp + 状态优化

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 数位dpdpdp挺经典的一个题辣&#xff0c;有一个很明显的状态就是f[pos][num][lcm]f[pos][num][lcm]f[pos][num][lcm]表示到了第pospospos位&#xff0c;数是numnumnum&#xff0c;个位数最…

在C#中使用Irony实现SQL语句的解析

在上一篇博文 LogoSharp&#xff1a;Logo语言的C#实现中&#xff0c;我介绍了LOGO语言的C#实现&#xff0c;在该项目中&#xff0c;我使用了.NET下的语法解析框架&#xff1a;Irony。Irony框架最开始的时候是由Roman Ivantsov发布在codeplex上的一个开源项目&#xff0c;它使用…

【CF1045A】A Last chance【贪心】【线段树优化建图】【网络流构造方案】

题意&#xff1a;有nnn个武器和mmm个飞船&#xff0c;武器有下面三种 从给定的集合SSS中击破一个。在给定的区间[L,R][L,R][L,R]中击破一个。对于给定的a,b,ca,b,ca,b,c&#xff0c;选择000个或222个击破。特殊地&#xff0c;每个飞船最多被该操作的a,b,ca,b,ca,b,c指定一次。…

P4127 [AHOI2009]同类分布 数位dp + 对状态剪枝

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 比较套路的题&#xff0c;首先也有个明显的状态f[pos][num][sum]f[pos][num][sum]f[pos][num][sum]表示到了pospospos位&#xff0c;当前数为numnumnum&#xff0c;各位数字之和为sumsumsu…

.NET开发框架(六)-架构设计之IIS负载均衡(视频)

前面有关注我们公众号文章的朋友应该都知道&#xff0c;我们的分布式应用服务可以通过Ocelot网关进行负载均衡&#xff0c;这种方式属于应用级别的实现。而今天我们给大家介绍的是平台级别的实现&#xff0c;并且我们首次使用视频方式进行讲解。本文通过视频方式为大家演示&…

【NOI2019】斗主地【期望】【组合数学】【下降幂】【插值】

题意&#xff1a; 有nnn张牌&#xff0c;从上往下的第iii张牌权值是f(i)itypef(i)i^{type}f(i)itype。 进行mmm次洗牌操作&#xff0c;每次操作给定aia_iai​&#xff0c;将从上往下的前aia_iai​张牌分成一堆&#xff0c;后面bib_ibi​张牌分成第二堆。如果两堆的牌数分别为…

架构杂谈《二》

服务化到微服务1、微服务的产生随着互联网企业的不断发展&#xff0c;海量用户发起的大规模、高并发请求是企业不得不面对的&#xff0c;上一篇 架构杂谈《一》杂谈的SOA服务化系统能够分解任务&#xff0c;让每个服务更简单、职责单一、更易于扩展。但无论是Web Service 还是E…

Good Bye 2017 G. New Year and Original Order 数位dp + 按数贡献

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 定义S(k)S(k)S(k)为将kkk的每一位拿出来从小到大排序后构成的数&#xff0c;比如S(3421)1234S(3421)1234S(3421)1234&#xff0c;求S(k)1≤k≤nS(k)_{1\le k\le n }S(k)1≤k≤n​。 1≤n≤107001\le n\le 10…

【NOI2019】 机器人 【区间dp】【插值】【下降幂多项式】【分段函数】

题意&#xff1a;有个长度为nnn的序列aaa&#xff0c;ai∈[Li,Ri]a_i\in [L_i,R_i]ai​∈[Li​,Ri​]。从一个位置sss可以往左直到≥as\geq a_s≥as​,往右直到>as> a_s>as​。求有多少种可能的序列满足从任意位置向左或向右的最大步数的差的绝对值不超过222。 n≤300…

上海理工大学第二届“联想杯”全国程序设计邀请赛 Identical Day 思维 + 暴力

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你一个010101序列&#xff0c;假设有一段长为lll连续的全111子串&#xff0c;定义这段字串不高兴值为l∗(l1)2\frac{l*(l1)}{2}2l∗(l1)​&#xff0c;整个串的所有不高兴值相加为总的不高兴值。现在你可以…

简化 Pod 故障诊断:kubectl-debug 介绍

背景容器技术的一个最佳实践是构建尽可能精简的容器镜像。但这一实践却会给排查问题带来麻烦&#xff1a;精简后的容器中普遍缺失常用的排障工具&#xff0c;部分容器里甚至没有 shell (比如 FROM scratch &#xff09;。在这种状况下&#xff0c;我们只能通过日志或者到宿主机…