https://vjudge.net/problem/POJ-2236
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=1010;
int n,d;
int p[N],x[N],y[N],dis[N][N],bk[N];
void init()
{
for(int i=1;i<=n;i++) p[i]=i;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
dis[i][j]=(x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]);
}
int find(int x)
{
return x==p[x]? x:p[x]=find(p[x]);
}
void unon(int x,int y)
{
int fx=find(x),fy=find(y);
if(fx!=fy) p[fx]=fy;
}
int main()
{
ios::sync_with_stdio(false);
// cin.tie(0);
cin>>n>>d;
d=d*d;
for(int i=1;i<=n;i++)
cin>>x[i]>>y[i];
init();
char ch;
while(cin>>ch)
{
if(ch=='O')
{
int q;
cin>>q;
for(int i=1;i<=n;i++)
if(dis[q][i]<=d && bk[i])
unon(q,i);
bk[q]=1;
}
else
{
int a,b;
cin>>a>>b;
if(find(a)==find(b))
cout<<"SUCCESS\n";
else
cout<<"FAIL\n";
}
}
return 0;
}