蒟蒻求助
查看原帖
蒟蒻求助
730113
Rolen楼主2023/1/12 21:32

错误代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll fa[4000],ran[4000],sx,sy,tx,ty,x[4000],y[4000],n,r[4000];
void init(ll n)
{
	for(int i=1;i<=n+2;i++)
	{
		fa[i]=i;
		ran[i]=1;
	}
}
ll find(ll num)
{
	return fa[num]==num?num:(fa[num]=find(fa[num]));
}
void merge(ll i,ll j)
{
	int p=find(i),q=find(j);
	if(ran[p]<=ran[q])
	{
		fa[p]=q;
	}
	else
	{
		fa[q]=p;
	}
	if(ran[q]==ran[p])
	{
		ran[q]++;
	}
}
double getsum(ll i,ll j)
{
	return sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
}
int check(int i,int j)
{
	int mxr=max(r[i],r[j]),mnr=r[i]+r[j]-mxr,R=r[i]+r[j];
	double d=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
	if(d>mxr)
	{
		if(d<=R)
		{
			return 1;
		}
		else
		return 0;
	}
	else
	{
		if(d==mxr)
		{
			return 1;
		}
		else
		{
			if(d+mnr>=mxr)
			{
				return 1;
			}
			else
			return 0;
		}
	}
}
int main()
{
	cin>>n;
	cin>>sx>>sy>>tx>>ty;
	x[n+1]=sx;
	y[n+1]=sy;
	x[n+2]=tx;
	y[n+2]=ty;
	init(n);
	for(int i=1;i<=n;i++)
	{
		cin>>x[i]>>y[i]>>r[i];
	}
	for(int i=1;i<=n-1;i++)
	{
		for(int j=i+1;j<=n;j++)
		{
			if(check(i,j))
			{
				merge(i,j);
			}
		}
	}
	for(int i=1;i<=n;i++)
	{
		if(check(i,n+1))
		{
			merge(i,n+1);
		}
		if(check(i,n+2))
		{
			merge(i,n+2);
		}
	}
	/*for(int i=1;i<=n+2;i++)
	{
		cout<<i<<":"<<find(i)<<endl;
	}*/
	if(find(n+1)==find(n+2))
	{
		cout<<"Yes";
	}
	else
	{
		cout<<"No";
	}
}

求大佬们指出错误

2023/1/12 21:32
加载中...