Kruskal输出0求助
查看原帖
Kruskal输出0求助
551088
FincheuwYggdrasil楼主2022/8/10 16:35
#include<bits/stdc++.h>
using namespace std;
const int N = 110;
int p[N],num[N];
struct edge{
	int u,v;
	int w;
}e[N*N];

bool cmp(edge &a,edge &b)
{
	return a.w < b.w;
}

int find(int x)
{
	if(p[x] != x)
		p[x] = find(p[x]);
	return p[x];
}

int join(int x,int y)
{
	x = find(x),y = find(y);
	if(x == y)
		return 0;
	p[x] = y;
	num[y] += num[x];
	return 1;
}

int main()
{
	int n,m,cnt = 0;
 	scanf("%d",&n);
	
	for(int i = 1;i <= n;i++)
	{
		p[i] = i;
		num[i] = 1; 
	}
	for(int i = 1;i <= n;i++)
	{
		for(int j = 1;j <= n;j++)
		{
			cin >> m;
			if(j >= i)
				continue;
			
			e[cnt].u = i;
			e[cnt].v = j;
			e[cnt++].w = m;
		}
	}
	sort(e + 1,e + cnt + 1,cmp);
	int sum = 0;
	for(int i = 1;i <= m;i++)
		if(join(e[i].u,e[i].v) == 1)
			sum += e[i].w;
	cout << sum;
 	return 0;
}
2022/8/10 16:35
加载中...