错误代码
#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";
}
}
求大佬们指出错误