rwkj 1482

//1482
#include <iostream>
#include <cmath>
using namespace std;
int n,d;
struct point
{
int x,y,z,t;
}a[1005];

int find(int x )
{
if(a[x].z==x) return x;
else return a[x].z=find(a[x].z);
}
void jie(int x,int y)
{
int aa=find(x),bb=find(y);
if(aa!=bb) a[aa].z=bb;
}
int dis(int i,int j)
{
return sqrt((a[i].x-a[j].x)*(a[i].x-a[j].x)+(a[i].y-a[j].y)*(a[i].y-a[j].y))<=d;
}
int main()
{
int i,j;
char c;
cin>>n>>d;
for(i=1;i<=n;i++)
{
cin>>a[i].x>>a[i].y;
a[i].z=i; a[i].t=0;
}
while(cin>>c)
{
if(c=='O')
{
cin>>i,a[i].t=1;
for(j=1;j<=n;j++)
if(a[j].t==1&&j!=i&&dis(i,j))
{jie(i,j);break;}
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
if(a[j].t==1&&a[i].t==1&&dis(i,j))
jie(i,j);
}
if(c=='S')
{ // for(i=1;i<=n;i++)
//cout<<"ceshi:"<<endl<<i<<":"<<a[i].z<<endl;
cin>>i>>j;
if(find(i)==find(j)) cout<<"SUCCESS"<<endl;
else cout<<"FAIL"<<endl;
}
}
return 0;
}

原文地址:https://www.cnblogs.com/2014acm/p/3903299.html