求助:为什么最后三个点总是错,感觉没有问题啊
查看原帖
求助:为什么最后三个点总是错,感觉没有问题啊
91024
Flamed_Dream楼主2020/7/21 20:37
#include<bits/stdc++.h>
using namespace std;
int r[501],lct[501][2];
struct node
{
	double d;
	int x,y;
}w[200000];
bool cmp(node p,node q)
{
	return p.d<q.d;
}
int find(int a)
{
	if(r[a]!=a)
	  return r[a]=find(r[a]);
	return a;
}
int main()
{
	int s,p,k=0,sum=0;
	double ans;
	freopen("a.in","r",stdin);
	cin>>s>>p;
	for(int i=1;i<=p;i++)
	  scanf("%d%d",&lct[i][0],&lct[i][1]),r[i]=i;
	for(int i=1;i<=p;i++)
	  for(int j=i+1;j<=p;j++)
	  {
	  	  w[++k].x=i;
	  	  w[k].y=j;
	  	  w[k].d=sqrt((lct[i][0]-lct[j][0])*(lct[i][0]-lct[j][0])+(lct[i][1]-lct[j][1])*(lct[i][1]-lct[j][1]));
	  }
	sort(w+1,w+k+1,cmp);
	for(int i=1;i<=k;i++)
	{
		if(find(w[i].x)!=find(w[i].y))
		{
			sum++;
			r[w[i].y]=r[w[i].x];
			ans=w[i].d; 
		}
		if(sum>=p-s)
		{
			printf("%.2lf",ans);
			return 0;
		}
	}
	return 0;
} 

并查集做法

2020/7/21 20:37
加载中...