//============================================================================
// Name : POJ_2236_并查集.cpp
// Author : tiger
// Version :
// Copyright : Your copyright notice
// Description : 对于每修好一个点就遍历所有点与所有已修好并可达的点进行连接
//============================================================================
#include <iostream>
using namespace std;
int s[1005];
int find(int x)
{
int y;
while(x != s[x])
{
y = s[x];
s[x] = s[y];
x =y;
}
return x;
}
void connect(int i,int j)
{
int x = find(i);
int y = find(j);
if(x == y)
return;
s[x] = y;
}
int main() {
int point[1005][3];
freopen("in","r",stdin);
int n,d,i,j,p,q;
char c;
scanf("%d %d",&n,&d );
for(i = 1; i <= n; i++)
{
s[i] = i;
scanf("%d %d",&point[i][0],&point[i][1]);
point[i][2] = 0;
}
getchar();
while(scanf("%c",&c) != EOF)
{
if(c == 'O')
{
scanf("%d",&j);
for(i = 1; i <= n;i++)
{
if(point[i][2] &&
(point[j][0]-point[i][0])*( point[j][0]-point[i][0])+(point[j][1]-point[i][1])*( point[j][1]-point[i][1])
<= d*d
)
{
connect(i,j);
}
}
point[j][2] = 1;
}else
{
scanf("%d %d",&p,&q);
p = find(p);
q = find(q);
if(p == q)
printf("SUCCESS/n");
else
printf("FAIL/n");
}
getchar();
}
return 0;
}
POJ_2236_并查集
最新推荐文章于 2022-09-30 00:26:38 发布