POJ2236
https://vjudge.net/problem/POJ-2236
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
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
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
版本一 :
使用数组
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<cmath>
#define maxn 50010
using namespace std;
int n;
double d;
double dx[],dy[];
int pre[],repair[];
double dis(int a,int b)
{
return sqrt((dx[a]-dx[b])*(dx[a]-dx[b])+(dy[a]-dy[b])*(dy[a]-dy[b]));
}
int Find(int x)
{
if(x!=pre[x])
return pre[x]=Find(pre[x]);
}
int Union(int x,int y)
{
pre[Find(x)]=Find(y);
}
int main()
{
cin>>n>>d;
for(int i=;i<=n;i++)
{
cin>>dx[i]>>dy[i];
pre[i]=i;
}
char k;
int p,q,len=;
getchar();
while(~scanf("%c",&k))
{
if(k=='O')
{
cin>>p;
repair[len++]=p;
for(int i=;i<len-;i++)
if(dis(p,repair[i])<=d)
Union(repair[i],p);
}
else
{
cin>>p>>q;
if(Find(p)==Find(q))
cout<<"SUCCESS"<<endl;
else
cout<<"FAIL"<<endl;
}
getchar();
}
return ;
}
版本二:
使用结构体
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<cmath>
#define maxn 1005
using namespace std;
int n;
double d;
struct node
{
double x,y;
int pre;//根节点
int ranks;//树的高度
bool repair;//是否修复
}link[maxn];
int Find(int x)
{
if(x!=link[x].pre)
return link[x].pre=Find(link[x].pre);
}
double dis(int i,int j)
{
return sqrt((link[i].x-link[j].x)*(link[i].x-link[j].x)+(link[i].y-link[j].y)*(link[i].y-link[j].y));
}
void Union(int i,int j)
{
//if(link[i].repair&&link[j].repair)
// return 0;
int root1=Find(i),root2=Find(j);
//if(root1==root2)return 0;
if(link[root1].ranks>link[root2].ranks)
{
link[root2].pre=root1;
link[root1].ranks+=link[root2].ranks;
}
else
{
link[root1].pre=root2;
link[root2].ranks+=link[root1].ranks;
}
//return 1;
} int main()
{
cin>>n>>d;
for(int i=;i<=n;i++)
{
cin>>link[i].x>>link[i].y;
link[i].ranks=;
link[i].pre=i;
link[i].repair=;
}
char k;
int p,q;
getchar();
while(~scanf("%c",&k))
{
if(k=='O')
{
cin>>p;
link[p].repair=;
for(int i=;i<=n;i++)
{
if(Find(i)!=Find(p)&&link[i].repair&&dis(i,p)<=d)
Union(p,i);
}
}
else
{
cin>>p>>q;
if(Find(p)==Find(q))
cout<<"SUCCESS"<<endl;
else
cout<<"FAIL"<<endl;
}
getchar();
}
return ;
}
题目大意:
n个站点,已知站点的坐标。
‘O'操作 每次修通一个站点,该站点与距离该站点小于d且也为修通的站点联通;
’S'操作 查询两个站点是否联通。
思路:
并查集的题。设置距离函数,如果满足距离条件则将两个点合并。如果查询到的两点根节点相同则能联通。
POJ2236的更多相关文章
- POJ-2236(并查集)
Wireless NetWork POJ-2236 需要注意这里的树的深度需要初始化为0. 而且,find函数需要使用路径压缩,这里的unint合并函数也使用了优化(用一开始简单的合并过不了). #i ...
- 并查集 poj2236
网址:http://poj.org/problem?id=2236 题意:有n台坏的电脑,如果每两台电脑的距离不能超过d,那么这两台电脑有联系,用字符串O 表示标记第x台电脑维修了,用S判断从X到y是 ...
- poj2236(并查集)
题目链接: http://poj.org/problem?id=2236 题意: 有n台计算机, 已知每台计算机的坐标, 初始时所有计算机都是坏的, 然后修复其中一些计算机, 已修复的计算机距离不超过 ...
- poj-2236 Wireless Network &&poj-1611 The Suspects && poj-2524 Ubiquitous Religions (基础并查集)
http://poj.org/problem?id=2236 由于发生了地震,有关组织组把一圈电脑一个无线网,但是由于余震的破坏,所有的电脑都被损坏,随着电脑一个个被修好,无线网也逐步恢复工作,但是由 ...
- POJ2236 Wireless Network
解题思路:简单并查集,注意时间限制是10000MS,每次进行O操作之后, 进行一次for循环,进行相关调整.同时注意输入输出格式,见代码: #include<cstdio> #incl ...
- POJ2236 Wireless Network 并查集
水题 #include<cstdio> #include<cstring> #include<queue> #include<set> #include ...
- poj2236 基础并查集
题目链接:http://poj.org/problem?id=2236 题目大意:城市网络由n台电脑组成,因地震全部瘫痪,现在进行修复,规定距离小于等于d的电脑修复之后是可以直接相连 进行若干操作,O ...
- poj2236(并查集)
题目连接 题意:一张图上分布着n台坏了的电脑,并知道它们的坐标.两台修好的电脑如果距离<=d就可以联网,也可以通过其他修好的电脑间接相连.给出操作“O x”表示修好x,给出操作“S x y”,请 ...
- poj2236无线网络
这一题的大意:在救灾当中需要用网络,这堆人就用笔记本建了一个无线网,但是来,互相通信都是有距离限制的,一台电脑只能和距离他为d的电脑通信,然后一台电脑也可以通过几台电脑搭成线这样通信.然后就是输入每台 ...
随机推荐
- springMVC 拦截器源码解析
前言:这两天学习了代理模式,自然想到了 springmvc 的 aop 使用的就是动态代理,拦截器使用的就是 jdk 的动态代理.今天看了看源码,记录一下.转载请注明出处:https://www.cn ...
- tab栏切换案例
<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...
- linux学习笔记-解决google-chrome打开后弹出输入密码以解锁您的登录密钥环的提示
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 一.理论知识 1.密钥的作用 google-chrome存储了网站登录时使用的账号和密码信息,这个密钥是用来保护这些信息的 2. ...
- 自定义jq插件,鼠标悬浮展示图片或者视频放大图,可自定义展示内容
网站项目经常会遇到一些视频或者图片素材的展示功能,那么就需要自己写一个功能,就是在一些列表页面你想要是这个数据的详细内容,弹框在页面某个位置 例如这是视频悬浮展示效果,可自定义自动播放等属性标签 又例 ...
- Tsung 超详细的的tsung性能测试资料
超详细的的tsung性能测试资料 by:授客 QQ:1033553122 由于篇幅问题,采用链接分享的形式 下载连接:理解Tsung配置文件 下载连接:基准测试方法 下载连接:Tsung XML配置文 ...
- [20171211]ora-16014 11g.txt
[20171211]ora-16014 11g.txt --//上午测试了10g下备库log_archive_dest_1参数配置VALID_FOR=(ONLINE_LOGFILES,ALL_ROLE ...
- python第六十天-----RabbitMQ
RabbitMQ消息队列:默认为消息轮循模式,按client端启动是顺序接收 server端 import pika connection = pika.BlockingConnection(pika ...
- Postgre SQL连接服务器失败
首先这是登陆postgre sql时提示的错误信息: psql: 无法联接到服务器: Connection refused (0x0000274D/10061) 服务器是否在主机 &qu ...
- python装饰器(新年第一写)
祭奠碌碌无为的2018,想想其实也不算碌碌无为,至少我还搞懂了装饰器,写了一堆有用没用的玩意 原来觉得装饰器挺难的,直到2018年的最后几天,突然就明白了,难道这就是传说中的开天聪么 言归正传,之所以 ...
- 鸟哥的 Linux 私房菜Shell Scripts篇(三)
参考: http://linux.vbird.org/linux_basic/0340bashshell-scripts.php#script_be http://www.runoob.com/lin ...