/*并查集*/
#include <iostream>
#include <cmath>
#include <string>
using namespace std;
const int MAXN = 1005;
int father[MAXN];
int n, d;
struct node {
double x, y;
int flag;
};
node parent[MAXN];
void init()
{
for (int i = 1; i <= n; ++i) {
father[i] = i;
parent[i].flag = 0;
}
return;
}
int getfather(int x)
{
if (x != father[x])
father[x] = getfather(father[x]);
return father[x];
}
double caldis(node a, node b)
{
return sqrt(pow(a.x - b.x, 2.0) + pow(a.y - b.y, 2.0));
}
void solve(int j)
{
for (int i = 1; i <= n; ++i) {
if (i != j && parent[i].flag && caldis(parent[i], parent[j]) <= d) {
int fi = getfather(i);
int fj = getfather(j);
if (i == fi) {
father[i] = fj;
}
else {
if (j == fj) {
father[j] = fi;
}
else {
if (fi != fj) {
father[fi] = fj;
}
}
}
}
}
}
int main()
{
while (cin >> n >> d) {
init();
for (int i = 1; i <= n; ++i) {
cin >> parent[i].x >> parent[i].y;
}
string s;
int x, y;
while (cin >> s) {
if (s == "O") {
cin >> x;
parent[x].flag = 1;
solve(x);
}
else {
cin >> x >> y;
if (getfather(x) == getfather(y)) cout << "SUCCESS" << endl;
else cout << "FAIL" << endl;
}
}
}
return 0;
}
POJ2236 Wireless Network
最新推荐文章于 2020-07-21 14:39:56 发布