解锁成就--满江红--help必关
查看原帖
解锁成就--满江红--help必关
1373509
Himborne楼主2025/1/22 10:07
#include <bits/stdc++.h>
using namespace std;
const int N=510;
struct RawEdge{
	int from,to,val;
};
vector<RawEdge> edges;
int fa[N];
bool cmp(RawEdge &a,RawEdge &b){
	return a.val<b.val;
}
int get_fa(int cur){
	if(cur==fa[cur]){
		return cur;
	}
	fa[cur]=get_fa(fa[cur]);
	return fa[cur];
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int n,i,j;
	cin >> n;
	for(i=0;i<+n;i++){
		fa[i]=i;
	}
	for(i=1;i<=n;i++){
		int w;
		cin >> w;
		edges.push_back((RawEdge){0,i,w});
	}
	for(i=1;i<=n;i++){
		for(j=1;j<=n;j++){
			int p;
			cin >> p;
			if(p!=0){
				edges.push_back((RawEdge){i,j,p});
			}
		}
	}
	sort(edges.begin(),edges.end(),cmp);
	int val=0;
	for(i=0;i<edges.size();i++){
		const int u=edges[i].from;
		const int v=edges[i].to;
		if(get_fa(u)==get_fa(v)){
			continue;
		}
		fa[get_fa(u)]=get_fa(v);
		val=val+edges[i].val;
	}
	cout << val;
	return 0;
}

CPU烧了

2025/1/22 10:07
加载中...