POJ 2236-Wireless Network(并查集)
2016-04-06 19:38
531 查看
Wireless Network
Time Limit: 10000MS | Memory Limit: 65536K | |
Total Submissions: 21632 | Accepted: 9060 |
An earthquake takes place in Southeast Asia. The ACM (Asia Cooperated Medical team) have set up a wireless network with the lap computers, but an unexpected aftershock attacked, all computers in the network were all broken. The
computers are repaired one by one, and the network gradually began to work again. Because of the hardware restricts, each computer can only directly communicate with the computers that are not farther than d meters from it. But every computer can be regarded
as the intermediary of the communication between two other computers, that is to say computer A and computer B can communicate if computer A and computer B can communicate directly or there is a computer C that can communicate with both A and B.
In the process of repairing the network, workers can take two kinds of operations at every moment, repairing a computer, or testing if two computers can communicate. Your job is to answer all the testing operations.
Input
The first line contains two integers N and d (1 <= N <= 1001, 0 <= d <= 20000). Here N is the number of computers, which are numbered from 1 to N, and D is the maximum distance two computers can communicate directly. In the next
N lines, each contains two integers xi, yi (0 <= xi, yi <= 10000), which is the coordinate of N computers. From the (N+1)-th line to the end of input, there are operations, which are carried out one by one. Each line contains an operation in one of following
two formats:
1. "O p" (1 <= p <= N), which means repairing computer p.
2. "S p q" (1 <= p, q <= N), which means testing whether computer p and q can communicate.
The input will not exceed 300000 lines.
Output
For each Testing operation, print "SUCCESS" if the two computers can communicate, or "FAIL" if not.
Sample Input
4 1 0 1 0 2 0 3 0 4 O 1 O 2 O 4 S 1 4 O 3 S 1 4
Sample Output
FAIL SUCCESS
Source
POJ Monthly,HQM
/* * Copyright (c) 2016, 烟台大学计算机与控制工程学院 * All rights reserved. * 文件名称:father.cpp * 作 者:单昕昕 * 完成日期:2016年1月19日 * 版 本 号:v1.0 */ #include <iostream> #include <cstring> #include <cstdio> using namespace std; const int N=1000+3; int x ,y ,set ; bool valid ; int set_find(int d) { if (set[d]<0) return d; return set[d]=set_find(set[d]); } void join(int p,int q) { p=set_find(p); q=set_find(q); if(p!=q) set[p]=q; } int main() { int n,d,i,p,q; char c; scanf("%d%d",&n,&d); for(i=1; i<=n; ++i) scanf("%d%d",&x[i],&y[i]); memset(valid,false,sizeof(valid)); memset(set,-1,sizeof(set)); while(cin>>c) { if(c=='O') { scanf("%d",&p); valid[p]=true; for(i=1; i<=n; ++i) if(valid[i]&&((x[i]-x[p])*(x[i]-x[p])+(y[i]-y[p])*(y[i]-y[p])<=d*d))//距离 join(i,p); } else if(c=='S') { scanf("%d%d",&p,&q); if(set_find(p)==set_find(q)) printf("%s\n","SUCCESS"); else printf("%s\n","FAIL"); } } return 0; }
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 如何写好 C main 函数
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- Lua和C语言的交互详解
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法