P1194,30分,求助
  • 板块P1194 买礼物
  • 楼主SLTLS99
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/4/17 08:46
  • 上次更新2023/10/28 03:31:42
查看原帖
P1194,30分,求助
339897
SLTLS99楼主2022/4/17 08:46
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
using namespace std;
struct node{
	int x;
	int y;
	int w;
}a[1000005];
int f[1000005];
int n,m;
int ans;
int cnt;
int sum; 
int x,y,w;
bool cmp(node x,node y){
	return x.w<y.w;
}
int ff(int x){
	if(f[x]==x){
		return x;
	}
	return f[x]=ff(f[x]);
}
int main(){
	cin>>n>>m; 
	for(int i=1;i<=m;i++){
		for(int j=1;j<=m;j++){
			cin>>w;
			if((w!=0)&&(i<j)){
				cnt++; 
				a[cnt].x=i;
				a[cnt].x=j;
				a[cnt].w=w;
			} 
		}
	}
	for(int i=1;i<=m;i++){
		cnt++;
		a[cnt].x=i;
		a[cnt].y=m+1;
		a[cnt].w=n;
	}
	m++;
	for(int i=1;i<=m;i++){
		f[i]=i;
	}
	sort(a+1,a+1+cnt,cmp);
	for(int i=1;i<=cnt;i++){
		int xx=ff(a[i].x);
		int yy=ff(a[i].y);
		if(xx!=yy){
			f[xx]=yy;
			ans+=a[i].w;
			sum++;
		}
		if(sum==m-1){
			break;
		}
	}
	cout<<ans;
return 0;
}
2022/4/17 08:46
加载中...