28分求调,悬关
查看原帖
28分求调,悬关
970141
GreenMelon楼主2025/1/22 20:08

rt,A 了 1 2 5 8。

#include<bits/stdc++.h>
#define int long long 
#define N 505
using namespace std;
struct node{
	int u, v, w;
} y[250005];
int a, b, x[N][N], f[250005], cnt=1, ans;
bool cmp(node x, node y){
	return x.w<y.w;
}
int find(int x){
	if(x==f[x]) return x;
	return f[x]=find(f[x]);
}
signed main() {
	cin>>a>>b;
	for(int i=1;i<=b;i++){
		for(int j=1;j<=b;j++){
			cin>>x[i][j];
			y[cnt++].u=i;
			y[cnt].v=j;
			f[cnt]=cnt;
			if(x[i][j]==0) y[cnt].w=a;
			else y[cnt].w=x[i][j];
			
		}
	}
	sort(y+1, y+cnt, cmp);
	for(int i=1;i<=cnt;i++){
		if(i==1){
			ans+=a;
			continue;
		}
		if(find(y[i].u)!=find(y[i].v)){
			ans+=y[i].w;
			f[find(y[i].u)]=find(y[i].v);
		}
	}
	cout<<ans;
	return 0; 
}
2025/1/22 20:08
加载中...