题干:

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

题目大意:

先给出一些点(的坐标x和y),接下来有两种操作  'O'代表修复一个点。'S'代表测试当前情况下是否两者已经连上。有一个计算机网络的所有线路都坏了,网络中有n台计算机,现在你可以做两种操作,修理(O)和检测两台计算机是否连通(S),只有修理好的计算机才能连通。连通有个规则,两台计算机的距离不能超过给定的最大距离D(一开始会给你n台计算机的坐标)。检测的时候输出两台计算机是否能连通。

解题报告:

不算难啊这题,但是要注意,你能并起来的前提是这个电脑已经被修好了,所以用ok[ top ]记录一下已经被修好的电脑的下标。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
const double eps = 1e-6;
int ok[1000 + 5];//代表已经修好的点 存标号即可 然后再结构体查询
int f[1000 + 5];
int n,d;
struct Node {double x,y;} node[1000 + 5];
int getf(int v) {return v==f[v]?v:f[v]=getf(f[v]);}
void merge(int u,int v) {int t1=getf(u);int t2=getf(v);if(t1!=t2) {f[t2]=t1;}
}double dis(Node a,Node b)
{return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
void init() {for(int i = 1; i<=n; i++) {f[i]=i;}
}
int main()
{int u,v;int top=0;char op[5];cin>>n>>d;init();for(int i = 1; i<=n; i++) {scanf("%lf %lf",&node[i].x,&node[i].y);}while(~scanf("%s",op) ) {if(op[0]=='O') {scanf("%d",&u);for(int i = 1; i<=top; i++) {//因为只能与修复的电脑进行连接 if(dis(node[ok[i] ] ,node[u] ) - d < eps) {merge(ok[i],u);}}    ok[++top] = u;   }else {scanf("%d %d",&u,&v);getf(u) == getf(v) ? printf("SUCCESS\n") : printf("FAIL\n");}}return 0 ;
}

总结:

这题有一个技巧,ok数组存的是结构体下标,而不是另开一个ok结构体,这增强了代码的可读性与节省了空间。

【POJ - 2236】Wireless Network (并查集)相关推荐

  1. POJ 2236 Wireless Network 并查集

    Wireless Network 并查集 Crawling in process... Crawling failed Time Limit:10000MS     Memory Limit:6553 ...

  2. POJ 2236 - Wireless Network ( 并查集 )

    题意 一个计算机网络里的计算机都坏了, 现在有两种操作, "O p"代表修复了p机器, "S p q"代表检查 p, q 两台机器是否连接( 直线距离<= ...

  3. POJ 2236 Wireless Network (并查集)

    Wireless Network 题目链接: http://acm.hust.edu.cn/vjudge/contest/123393#problem/A Description An earthqu ...

  4. POJ 2236 Wireless Network

    传送门:http://poj.org/problem?id=2236 解题思路: 利用了并查集 在操作一: 主要判断这个维修的电脑,和已经维修好的电脑的关系,如果他们的距离不大于题中限制的距离,就把他 ...

  5. POJ 2236 Wireless Network

    题意:有n台电脑,分布在一个二维坐标系中,两台距离不超过d的电脑可以相互通信,初始所有的电脑都是坏的,给出一组操作,第一种操作是修复某台电脑,只有修好的电脑才可以互相通信,第二种操作是询问两台电脑是否 ...

  6. CF-1023F.Mobile Phone Network(并查集缩点)

    CF-1023F.Mobile Phone Network(并查集缩点) 题目链接 题意 你手里有K条边还没有分配权值,已经存在M条边带权值,如何给你手中的边分配权值,使得K条边都在最后的最小生成树中 ...

  7. UVA 1329 Corporative Network(并查集:路径压缩)

    UVA 1329 Corporative Network(并查集:路径压缩) 2014年03月09日 00:19:33 阅读数:914 UVA 1329 Corporative Network(并查集 ...

  8. POJ 1182 食物链,并查集的拓展

    http://poj.org/problem?id=1182 /******************************************************** 此道题目 前天看的时候 ...

  9. POJ 1417 True Liars 并查集+背包

    题目链接:http://poj.org/problem?id=1417 解题思路:比较容易想到的是并查集,然后把第三组数据测试一下之后发现这并不是简单的并查集,而是需要合并之后然后判断的.并且鉴于题目 ...

  10. poj 1456 Supermarket 贪心+并查集(个人感觉有点难判断出来

    poj 1456 这第一眼还觉得只要贪心就可以了,但是emmm看了大佬的题解居然真的要用到并查集= = 大佬清晰的思路 大佬舒服的代码 #pragma warning(disable:4996) #i ...

最新文章

  1. IDEA mybatis 在service无法使用@Autowired , could not autowire
  2. wxWidgets随笔(2)-hello,world
  3. HBase源码分析之HRegion上compact流程分析(三)
  4. 7.01面试长沙黄花机场
  5. Python 编写代码出现 process finished with exit code 0
  6. MongoDB的安装和启动方法详解
  7. SCOM2012SP1环境准备和安装
  8. 接口测试-接口定义功能-前端-实现动态增删表单
  9. gerrit配置replication插件
  10. mybatis-plus对datetime返回去掉.0_0欧姆电阻到底有没有用?这12个作用说明其不可或缺...
  11. php163邮箱正则,正则表达式匹配邮箱账号
  12. 2021 年最受欢迎的深度学习软件
  13. 图像处理基础操作一(几何变换、平滑处理、形态学操作)
  14. 计算机主机的cpu,台式机cpu能换吗?台式电脑换cpu的详细步骤
  15. ESP8266开发之旅 阿里云物联网平台篇⑥ LED智能灯控制系统 全面讲解,上手一个小项目(MQTT客户端直连 + Web配网 + WebSocket局域网通信)
  16. 关于在线答题系统设计的一些想法
  17. YouTube 双字幕浏览器辅助
  18. Mac 配置 Terminal 代理
  19. Sharepreferences
  20. c语言报告对老师的致谢,论文致谢对老师的感谢-论文老师的致谢词怎么写?

热门文章

  1. java xpath 解析xml_使用XPATH解析XML文件
  2. mysql innodb redolog_MySQL · 引擎特性 · InnoDB redo log漫游(转)
  3. python list存储方式_Python 之 将 list 存储为 .mat 文件
  4. 组个最小数C语言pta,PTA|C语言:组个最小数
  5. Mysql索引示例_MYSQL索引实例
  6. java多线程创建runnable_Java线程池和runnables创建runnables
  7. php异步轮询如何实现,深入剖析JavaScript异步之事件轮询
  8. python爬虫网络请求超时_Python网络爬虫编写5-使用代理,处理异常和超时
  9. 矩阵运算——平移,旋转,缩放
  10. Wince6.0编译错误经验总结