首页 > 其他分享 >题解:AT_abc352_e [ABC352E] Clique Connect

题解:AT_abc352_e [ABC352E] Clique Connect

时间:2024-08-21 23:25:04浏览次数:12  
标签:return int 题解 Ki abc352 fa edge Connect

[题目通道]([ABC352E] Clique Connect - 洛谷)
鄙人今日写人生第一篇题解
希望管理大大通过

首先,我们先看题:

它说一共有n个点,m回操作。。。
每次操作 都有 一个Ki 和 Ci
Ki代表有Ki个点,Ci代表每条边所赋的边权

一看就知道这是个最小生成树的板子

我使用了著名的 kruskal

话不多说贴上代码

#include<bits/stdc++.h>
#define int long long
  
using namespace std;

const int N=2e5+100;//注意范围!!! 

struct edge{
	int u,v;
	int w;
}e[N*30];//开大点儿 

int fa[N],n,m,ans=0,cnt=1,x,y,a[N],t=0;//cnt计数器,记录有多少条边~ 

int find(int x){
	if (fa[x]==x) return x;
	return fa[x]=find(fa[x]);
}//找father 

bool cmp(edge a,edge b){
	return a.w<b.w;
} 

signed main(){
	std::ios::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);//加速 
	cin>>n>>m;
	for (int i=1;i<=n;i++){
	    fa[i]=i;
	}
	for (int i=1;i<=m;i++){
		int qq,ww;
		cin>>qq>>ww;
		for (int j=1;j<=qq;j++){
			cin>>a[j];//临时存一遍每个点 
		}
		for (int j=2;j<=qq;j++){//做一遍建边~ 
			cnt++;
			e[cnt].u=a[j];
			e[cnt].v=a[j-1];
			e[cnt].w=ww;
		}
		cnt++;
		e[cnt].u=a[1];
		e[cnt].v=a[qq];
		e[cnt].w=ww;//需注意a[1]和a[qq]也要建边! 
	} 
	sort(e+1,e+cnt+1,cmp);//从小到大排序~~~ 
	for (int i=1;i<=cnt;i++){//相信各位都了解这是干什么的~ 
		int fu=find(e[i].u);
		int fv=find(e[i].v);
		if (fu!=fv){
			fa[fu]=fv; ans+=e[i].w; t++;
			if (t==n-1){
				break;
			}
		}
	}
	if (t<n-1) cout<<-1;//如果小于需要的,代表不行,输出-1. 
	else cout<<ans;//反之输出答案~ 
	return 0;
}
如果有何不适,请管理员大大斧正

感谢观看

标签:return,int,题解,Ki,abc352,fa,edge,Connect
From: https://blog.csdn.net/2302_78855882/article/details/141370118

相关文章

  • P10892 题解
    思路考虑贪心策略。当剩下的猫猫数量为偶数的时候,直接取出\(\large\frac{n}{2}\)只猫猫即可。否则当剩下的猫猫数量为奇数的时候,则要尽可能保持第二天猫猫的数量为偶数。则要考虑\(n-\large\frac{n-1}{2}\)和\(n-\large\frac{n+1}{2}\)哪个是偶数。第二条化简一下就......
  • AGC003 题解
    目录A-WannagobackhomeB-SimplifiedmajhongA-Wannagobackhome注意到横纵坐标是独立的,因此可以分开考虑。考虑横坐标或纵坐标最终为零的充要条件为:没有出现任何关于它的任何操作(没有N和S,或没有W和E);出现所有关于它的任何操作(有向正方向走与往负方向走,如有......
  • CF2000 A~C 题解
    CodeforcesRound967(Div.2)A~C题解(未完待续)唐完了,B构造不会,C交互不会,整场爆切\(1\)题喜提\(-115\)rating强势上灰!我还会什么?I.2001A-MakeAllEqual先找出答案的下界。设众数为\(x\),其出现的次数为\(\operatorname{cnt}(x)\)。由于每次操作只能删除一个数,答......
  • CF889E题解
    \(\text{Problem-889E-Codeforces}\)\(\text{*3000}\)题意给一个序列,对于一个非负整数\(x\),有一个式子:\[x\bmoda_1+x\bmoda_1\bmoda_2+...+x\bmoda_1\bmoda_2...\bmoda_n\]求出上式的最大值。思路先去寻找题目的性质。首先\(x\)的值单调不增,然后如果当前\(x......
  • pgsql登录不上,psql: error: connection to server on socket "/var/run/postgresql/.s
    背景在ubuntu上安装postgres,发现不能直接登录。分析默认是linux系统上的某个对应的用户才能使用对应的pg数据库的用户,因此我们需要作修改。解决编辑以下路径对应的文件,此处的14是版本,不知道的cd过去看看就行了。/etc/postgresql/14/main/pg_hba.conf将下图中对应位置改成m......
  • C#联合halcon实现connection后的物料上色、物料计数、物料框选
    一、效果预览二、实现步骤三、代码部分ReadImageThresholdHalconWindowShowImageRectangleDef类库GenRectanglepublicstaticvoidGenRectangle(HObjectRegion,outHObjectExternalRegion,outRectangleDefrectangleDef,boolisMargin,HWindowhWindow)......
  • [SCOI2014] 方伯伯的玉米田 题解
    对于每次修改的区间以及其左边序列和右边序列,共三种情况:1.区间内比两侧低的还是低2.区间内比两侧低的变得比两侧高了3.区间内比两侧高的还是高那么现在又面临一个问题:在区间内变化后,对答案,即最长不下降子序列有什么影响。对区间左边:可能会使其最长不下降子序列增长对区间......
  • SP368 CSTREET - Cobbled streets 题解
    题意选n−1条道路连接n个城市,且使得其修建的价格最小。分析最小生成树的模板题,可以用kruskal来做。首先,先将所有的边权从小到大排序。然后,取当前没有选过的,且边权最小的边,判断它连接的两个点是否同属一个集合,如果不是就把他们加到同一个集合中,再记录答案。代码很简单,......
  • [CERC2019] ABB 题解
    题目可以转化为求最长回文子串,答案就是长度减去最长回文子串的长度。看到是求最长回文子串,一眼就容易想到马拉车。此题只需在求出回文半径的基础上储存回文串的右端点,将求出的右端点排序,只要右端点不在最后的字符就结束(不能补),如果在最后的字符就取原字符串长度与当前回文子串的差......
  • [JOISC 2023 Day3] Tourism 题解
    大家好,我喜欢珂朵莉树,所以我用珂朵莉树\(AC\)了本题。实际上,我们比较容易发现,这题实际上就是求\([l,r]\)中的所有点作为关键点时,虚树所压缩的所有点(实际上就是显现出来的点+在虚边上的点)。那么我们容易发现,一个点\(x\)作为虚树所压缩的所有点的充要条件为:\(x\)是至少......