poj2236(并查集)
题目链接: http://poj.org/problem?id=2236
题意: 有n台计算机, 已知每台计算机的坐标, 初始时所有计算机都是坏的, 然后修复其中一些计算机, 已修复的计算机距离不超过distance的可以联网(若a, b之间可以联网, b, c之间可以联网, 则a, c之间可以联网),询问x, y之间可否联网;
第一行输入n, distance, 表示有n台计算机, 联网的两台计算机距离不能超过distance;
接下来n分别表示n台计算机的坐标;
再接下来到输入结束, 输入格式为: O, x 的表示修复第x台计算机, 输入格式为S, x, y 的表示询问x, y之间能否联网, 若能输出 SUCCESS, 不能则输出 FAIL;
思路: 直接并查集就好啦, 将能联网的计算机合并就OK啦...
代码:
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <math.h>
#define D(x1, y1, x2, y2) sqrt(pow(x2-x1, 2)+pow(y2-y1, 2))
#define MAXN 1010
using namespace std; int pre[MAXN];
struct Node{
int x, y, flag;
}gg[MAXN]; int find(int x){ //***递归路径压缩
return x==pre[x]?pre[x]:pre[x]=find(pre[x]);
} void jion(int x, int y){//***合并
int fx=find(x);
int fy=find(y);
if(fx!=fy){
pre[fy]=fx;
}
} int main(void){
int n, distance;
scanf("%d%d", &n, &distance);
for(int i=; i<=n; i++){
int x, y;
scanf("%d%d", &x, &y);
gg[i].x=x;
gg[i].y=y;
gg[i].flag=;
}
for(int i=; i<=n; i++){
pre[i]=i;
}
char ch[];
int x, y;
while(~scanf("%s", ch)){
if(ch[]=='O'){
scanf("%d", &x);
gg[x].flag=;
for(int i=; i<=n; i++){
if(i!=x&&gg[i].flag){ //**如果i不是x且i已修复
if(D(gg[x].x, gg[x].y, gg[i].x, gg[i].y)<=distance&&find(x)!=find(i)){ //**x, i属于不同集合,并且他们的距离不大于distance
jion(x, i);
}
}
}
}else{
scanf("%d%d", &x, &y);
if(find(x)==find(y)){
printf("SUCCESS\n");
}else{
printf("FAIL\n");
}
}
}
return ;
}
poj2236(并查集)的更多相关文章
- POJ2236(并查集入门)
Wireless Network Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 22977 Accepted: 961 ...
- 并查集 poj2236
网址:http://poj.org/problem?id=2236 题意:有n台坏的电脑,如果每两台电脑的距离不能超过d,那么这两台电脑有联系,用字符串O 表示标记第x台电脑维修了,用S判断从X到y是 ...
- poj-2236 Wireless Network &&poj-1611 The Suspects && poj-2524 Ubiquitous Religions (基础并查集)
http://poj.org/problem?id=2236 由于发生了地震,有关组织组把一圈电脑一个无线网,但是由于余震的破坏,所有的电脑都被损坏,随着电脑一个个被修好,无线网也逐步恢复工作,但是由 ...
- poj2236 基础并查集
题目链接:http://poj.org/problem?id=2236 题目大意:城市网络由n台电脑组成,因地震全部瘫痪,现在进行修复,规定距离小于等于d的电脑修复之后是可以直接相连 进行若干操作,O ...
- 基础并查集poj2236
An earthquake takes place in Southeast Asia. The ACM (Asia Cooperated Medical team) have set up a wi ...
- POJ2236 Wireless Network 并查集简单应用
Description An earthquake takes place in Southeast Asia. The ACM (Asia Cooperated Medical team) have ...
- POJ-2236.WireleseNetwork.(并查集)
Wireless Network Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 43199 Accepted: 178 ...
- 并查集——poj2236(带权并查集)
题目:Wireless Network 题意:给定n台已损坏计算机的位置和计算机最远通信距离d,然后分别根据命令执行以下两种操作: "O p" (1 <= p <= N ...
- poj2236 Wireless Network(并查集直接套模板
题目地址:http://poj.org/problem?id=2236 题目大意:n台电脑都坏了,只有距离小于d且被修好的电脑才可以互相联系,联系可传递.输入n和d,n个点的坐标x y.两个操作:O ...
随机推荐
- 谷歌黑科技WaveNet,更先进的语音合成
导读 Google 的 DeepMind 研究实验室昨天公布了其在计算机语音合成领域的最新成果——WaveNet.该语音合成系统能够模仿人类的声音,生成的原始音频质量优于目前的文本转语音系统(text ...
- C++变量对比java变量所占内存
C++ char 1 short int 2 int 4 long int 8 float 4 double 8 long double 8 下面是计算程序: #include<math.h&g ...
- 安装ssh服务
1.先更新下源 sudo apt-get update 2.安装ssh服务 sudo apt-get openssh-server 3.配置ssh-server,配置文件位于/etc/ssh/sshd ...
- MVPHelper
在MVP的使用过程中,我们需要反复的去写各种MVP的接口和实现类, 实在是 太麻烦了!!所以抽时间撸了一款插件(只可用于Intellj IDEA 和 Android Studio),用于生成MVP接口 ...
- BZOJ 3827: [Poi2014]Around the world
Sol 并查集. 一个点所能到达的最远是单调不降的.然后将链延长到两倍,预处理出每个点到达的最远点,然后倒着计算深度. 再然后一直跳,跳到>=x+n的点,因为跳到的点都能到最终的点,并且不影响后 ...
- vb.net 控件(包括字体)随窗体按比例缩放
Public Class frmDl Dim x As Single = 0 Dim y As Single = 0 Private Sub frmDl_Load(ByVal sender As Sy ...
- git clone
raw text for ssh: git@github.com:TommyU/avbot_config.git git command on linux: git clone git://githu ...
- Droid4x设置代理抓包
Droid4x也是基于virtualbox+x86架构的 代理设置 设置->WIFI->鼠标按住WiredSSID选项不放->修改网络->显示高级选项->代理-> ...
- Service错误
错误日志: Caused by: java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { act= ...
- C语言宏定义时#(井号)和##(双井号)的用法
C语言中如何使用宏C(和C++)中的宏(Macro)属于编译器预处理的范畴,属于编译期概念(而非运行期概念).下面对常遇到的宏的使用问题做了简单总结. 关于#和## 在C语言的宏中,#的功能是将其后面 ...