#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<cmath>
using namespace std;
const int maxn=1010;
struct node
{
int x,y;
}N[maxn];
int pre[maxn];
vector<int> V;
int find(int x)
{
int r=x;
while(r!=pre[r]){
r=pre[r];
}
int i=x,j;
while(i!=r){
j=pre[i];
pre[i]=r;
i=j;
}
return r;
}
void join(int x,int y)
{
int fx=find(x),fy=find(y);
if(fx!=fy)
pre[fx]=fy;
}
int main()
{
int n;
double d;
cin>>n>>d;
for(int i=1;i<=n;i++)
cin>>N[i].x>>N[i].y;
for(int i=1;i<=n;i++)
pre[i]=i;
char ch;
int x1,x2;
while(cin>>ch){
if(ch=='O'){
cin>>x1;
int len=V.size();
for(int i=0;i<len;i++){
double distance=sqrt((N[V[i]].y-N[x1].y)*(N[V[i]].y-N[x1].y)+(N[V[i]].x-N[x1].x)*(N[V[i]].x-N[x1].x));
if(distance<=d){
join(V[i],x1);
/*
for(int i=1;i<=n;i++){
printf("%d ",pre[i]);
}
printf("\n");
*/
}
}
V.push_back(x1);
}
else {
cin>>x1>>x2;
if(find(x1)==find(x2)){
cout<<"SUCCESS"<<endl;
}
else {
cout<<"FAIL"<<endl;
}
}
}
return 0;
}
poj B
猜你喜欢
转载自blog.csdn.net/qq_40861069/article/details/81104086
今日推荐
周排行