Kruskal 90分,第二个测试点就是过不去,求挑错
查看原帖
Kruskal 90分,第二个测试点就是过不去,求挑错
222341
twocats楼主2020/7/26 18:22
#include<bits/stdc++.h>
#define ull unsigned long long
#define N 5000+1
using namespace std;

struct node{
	ull x,y,v;
}E[N];

ull m,n,k=1,dis,ans,f[N];

bool cmp(node a,node b)
{
	return a.v<b.v;
}

ull find(ull k)
{
	if(f[k]==k)	return k;
	return f[k]=find(f[k]);
}

int main()
{
	scanf("%lld",&n);
	for(ull i=1;i<=n;i++)
	{
		f[i]=i;
		for(ull j=1;j<=n;j++)
		{
			scanf("%lld",&dis);
			if(dis)
			{
				E[++m].x=i;
				E[m].y=j;
				E[m].v=dis;
			}
		}
	}
	sort(E+1,E+m+1,cmp);
	for(ull i=1;i<=m&&n!=k;i++)
	{
		if(find(E[i].x)!=find(E[i].y))
		{
			f[find(E[i].x)]=find(E[i].y);
			ans+=E[i].v,k++;
		}
	}
	printf("%lld",ans);
	return 0;
}
2020/7/26 18:22
加载中...