湖南科技大学 问题 B: 并查集_无线网络 水题
2012-08-22 22:04
253 查看
问题 B: 并查集_无线网络
时间限制: 1 Sec 内存限制: 128 MB提交: 3 解决: 2
[提交][状态][讨论版]
题目描述
一场地震在东南亚发生了。不幸的是ACM组织通过电脑建立的无线网络遭到了毁灭性的影响—--网络中所有的电脑都损坏了。在陆续的维修电脑之后,无线网络有逐渐开始再一次运作了。由于硬件的制约,每两台电脑只能保持不超过d米的距离,才可以直接进行通讯。但是每台电脑又可以作为其它两台电脑通讯的中介点,也就是说假设A电脑与B电脑不在能直接通讯的的范围内,但是它们可以通过同时能与A和B电脑通讯的C电脑建立间接通讯关系。在维修的过程中,维修者可以进行两种操作:维修一台电脑或者检测两台电脑之间是否能够通讯。你的任务就是解答每一次的检测操作。
输入
第一行包含两个整数N和d (1 <= N <= 1001, 0 <= d <= 20000).N表示电脑的数量,电脑编号从1开始到N,d为两台能直接通讯的电脑所需保持的距离的最大值。在接下来的N行里,每行包含两个整数xi, yi (0 <= xi, yi <= 10000),表示N台电脑的坐标。接下来的一系列的输入都表示维修者的操作,每种操作都是以下两种中的一种:1. "O p" (1 <= p <= N),表示维修第p台电脑。
2. "S p q" (1 <= p, q <= N), 表示检测p与q电脑是否能够通讯。
输入不会超过300000 行。
输出
对于每组检测操作,若两台电脑能进行通讯就输出"SUCCESS",否则输出"FAIL"。样例输入
4 1
0 1
0 2
0 3
0 4
O 1
O 2
O 4
S 1 4
O 3
S 1 4
样例输出
FAIL
SUCCESS
提示
没有神马好看的 本题就是一个普通的并查集
#include<stdio.h> #include<math.h> struct haha { int x; int y; int flag; }a[2000]; int parent[2000]; int find(int x) { return x==parent[x]?x:find(parent[x]); } int main() { int i,j,n,x,y,start,end,r1,r2,pos; double k,d; char s[2]; scanf("%d %lf",&n,&d); for(i=1;i<=n;i++) { scanf("%d %d",&x,&y); a[i].x=x; a[i].y=y; a[i].flag=0; parent[i]=i; } while(scanf("%s",s)!=EOF) { if(s[0]=='O') { scanf("%d",&pos); a[pos].flag=1; for(i=1;i<=n;i++) if(a[i].flag) { k=sqrt((a[pos].x-a[i].x)*(a[pos].x-a[i].x)+(a[pos].y-a[i].y)*(a[pos].y-a[i].y)); if(k<=d) { r1=find(pos); r2=find(i); if(r1!=r2) parent[r1]=r2; } } } if(s[0]=='S') { scanf("%d %d",&start,&end); // if(!a[start].flag||!a[end].flag) {printf("FAIL\n"); continue;} r1=find(start); r2=find(end); if(r1==r2){printf("SUCCESS\n");} // k=sqrt((a[start].x-a[end].x)*(a[start].x-a[end].x)+(a[start].y-a[end].y)*(a[start].y-a[end].y)); // if(k<=d) {printf("SUCCESS\n"); parent[r1]=r2;continue;} else printf("FAIL\n"); } } }
相关文章推荐
- 无线网络信道的问题
- 不容小视 全球无线网络安全问题
- win7 无线上网 未识别的网络 ipv4 "无internet访问权限"问题解决方案汇总
- 无线网络IP地址冲突问题不再棘手
- 无线网络服务没有开启导致的wifi无法搜索的网络的问题
- ipod无法使用无线网络问题分析
- 当笔记本是无线连接网络时,如何正确配置virtualbox的上网问题
- 无线网络驱动问题
- windows 2008初体验常见问题: 无线网络"没有正确配置为使用IP协议" 错误解决办法
- 解决Ubuntu 9.04无线网络的不稳定问题-转
- 真逗!ubuntu14无法识别无线网络的问题居然这样就解决了!
- 在使用win 7 无线承载网络时,启动该服务时,有时会提示:组或资源的状态不是执行请求操作的正确状态。 网上有文章指出,解决这个问题的方法是在设备管理器中启动“Microsoft托管网络虚拟适配
- 解决在无线网络下本机无法连接linux(红帽)虚拟机问题
- Win10 无线网络802.1X认证 PEAP问题
- ONVIF扫描不到无线网络设备的问题
- 解决Win7旗舰版开机后无线网络识别非常慢的问题
- 无线网络安全问题
- 无线和有线网络同时连接时,出现网络连接超时问题解决
- 解决Linux下同时使用有线和无线网络时,网络连接的优先级问题
- 无线网络传输问题探讨及效果分析