文章

211

粉丝

1

获赞

1153

访问

43.9k

头像
有意思的最小生成树 题解:
P1222
发布于2026年3月5日 15:00
阅读数 157

#include <bits/stdc++.h>
using namespace std;
const int maxn = 200005;

struct node{
	int u,v,w;
};
vector<node> g;
bool cmp(node a,node b){
	return a.w < b.w;
}
int rt[maxn];
int find(int x){
	if (x == rt[x]) return x;
    rt[x] = find(rt[x]); // 路径压缩
    return rt[x];
}
int main(){
	int t;
	cin >> t;
	while(t--){
		g.clear();
		int n,m;
		cin >> n >> m;
		int a,b,c;
		for(int i=0;i<m;i++){
			cin >> a >> b >> c;
			int exist = 0;
			for(auto& it:g){
				if((it.u == a && it.v == b)||(it.u == b && it.v == a)){
					it.w = c;
					exist = 1;
					break;
				}
			}	
			if(exist == 0)
					g.push_back({a,b,c});
	
			for(int i=0;i<n;i++)
					rt[i] = i;
			sort(g.begin(),g.end(),cmp);
			int cnt=0,sum=0;
			for(auto it:g){
				int u = it.u;
				int v = it.v;
				if(find(u) != find(v)){
					cnt++;
					sum += it.w;
					rt[find(u)] = find(v);
				}	
				if(cnt...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发