0
点赞
收藏
分享

微信扫一扫

Linux音频调试示例

解析:

        并查集,求每个集合的最小费用。

         每次合并集合的时候,根节点保存当前集合最小的费用。 

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+5;
int n,m,a[N],p[N],cnt[N];
int find(int x){
	return x==p[x]?x:p[x]=find(p[x]);
}
signed main(){
	scanf("%lld%lld",&n,&m);
	for(int i=1;i<=n;i++){
		scanf("%lld",&a[i]);
		p[i]=i;
	}
	while(m--){
		int x,y;
		scanf("%lld%lld",&x,&y);
		x=find(x),y=find(y);
		if(a[x]<=a[y]) p[y]=x;
		else p[x]=y;
	}
	int ans=0;
	for(int i=1;i<=n;i++){
		if(i==p[i]) ans+=a[i];
	}
	printf("%lld",ans);
	return 0;
}
举报

相关推荐

0 条评论