POJ2236 Wireless Network

来源:互联网 发布:webdriver java testng 编辑:程序博客网 时间:2024/05/23 16:16
/*并查集*/#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;}

0 0