kruskal样例第二次循环找起点的祖先会搞一个特别大的数,求助
查看原帖
kruskal样例第二次循环找起点的祖先会搞一个特别大的数,求助
184525
lnhrl楼主2021/1/2 20:19

rt

#include<iostream>
#include<algorithm>
using namespace std;
struct world{
	int start,number,end;
}a[100005];
int f[5005];
int n,m;
int ans;
bool cmp(world a,world b)
{
	return a.number<b.number;
}
int find(int x)
{
	if(f[x]!=x)
		f[x]=find(f[x]);
	else
		return x;
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=m;i++)
		cin>>a[i].start>>a[i].number>>a[i].end;
	for(int i=1;i<=n;i++)
		f[i]=i;
	sort(a+1,a+m+1,cmp);
	for(int i=1;i<n;i++)
	{
		int xx=find(a[i].start);
		int yy=find(a[i].end);
		if(xx==yy)
			continue;
		ans+=a[i].number;
		f[xx]=yy;
	}
	cout<<ans;
	return 0;
}

第二次循环的时候xx会变成6086656 然而x是1 ……

2021/1/2 20:19
加载中...