【并查集】POJ2236-Wireless Network
【题目大意】
已知每一台电脑只能与它距离为d的电脑相连通,但是两台电脑间可以以第三台作为媒介连接。现在电脑全被损坏。每次可以进行两个操作中的一个,或是修好一台电脑,或是查询两台电脑是否连通。
【思路】
显然是并查集。每次修好一台新电脑,就与之前修好的每一台电脑进行判断,距离在d以内就合并。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int MAXN=+;
int n,d;
int x[MAXN],y[MAXN],rep[MAXN];
int h[MAXN],pa[MAXN]; int ind(int a,int b)
{
return ((x[a]-x[b])*(x[a]-x[b])+(y[a]-y[b])*(y[a]-y[b])<=d*d);
} void newset()
{
for (int i=;i<n;i++)
{
h[i]=;
pa[i]=i;
}
} int find(int x)
{
int r=x;
while (pa[r]!=r) r=pa[r];
int p=x;
while (pa[p]!=r)
{
int temp=pa[p];
pa[p]=r;
p=temp;
}
return r;
} void unionset(int fa,int fb)
{
if (h[fa]>=h[fb])
{
pa[fb]=fa;
if (h[fa]==h[fb]) h[fa]++;
}
else
pa[fa]=fb;
} int main()
{
scanf("%d%d",&n,&d);
for (int i=;i<n;i++)
{
scanf("%d%d",&x[i],&y[i]);
} char c;
int repd=;//ÒѾÐ޺õĵçÄÔÊýÁ¿
newset(); getchar();
while (scanf("%c",&c)!=EOF)
{
if (c=='S')
{
int a,b;
scanf("%d%d",&a,&b);
a--;
b--;
if (find(a)==find(b)) cout<<"SUCCESS"<<endl;else cout<<"FAIL"<<endl;
} else
{
int a;
scanf("%d",&a);
a--;
for (int i=;i<repd;i++)
{
if (ind(a,rep[i]))
{
int fa=find(a),fb=find(rep[i]);
unionset(fa,fb);
}
}
rep[repd]=a;
repd++;
}
getchar();
}
return ;
}
【并查集】POJ2236-Wireless Network的更多相关文章
- 并查集-E - Wireless Network
E - Wireless Network An earthquake takes place in Southeast Asia. The ACM (Asia Cooperated Medical t ...
- [kuangbin带你飞]专题五 并查集 A - Wireless Network
An earthquake takes place in Southeast Asia. The ACM (Asia Cooperated Medical team) have set up a wi ...
- (并查集) Wireless Network --POJ --2236
链接: http://poj.org/problem?id=2236 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82830#probl ...
- POJ2236 Wireless Network 并查集简单应用
Description An earthquake takes place in Southeast Asia. The ACM (Asia Cooperated Medical team) have ...
- poj-2236 Wireless Network &&poj-1611 The Suspects && poj-2524 Ubiquitous Religions (基础并查集)
http://poj.org/problem?id=2236 由于发生了地震,有关组织组把一圈电脑一个无线网,但是由于余震的破坏,所有的电脑都被损坏,随着电脑一个个被修好,无线网也逐步恢复工作,但是由 ...
- poj2236 Wireless Network(并查集直接套模板
题目地址:http://poj.org/problem?id=2236 题目大意:n台电脑都坏了,只有距离小于d且被修好的电脑才可以互相联系,联系可传递.输入n和d,n个点的坐标x y.两个操作:O ...
- 基础并查集poj2236
An earthquake takes place in Southeast Asia. The ACM (Asia Cooperated Medical team) have set up a wi ...
- 并查集——poj2236(带权并查集)
题目:Wireless Network 题意:给定n台已损坏计算机的位置和计算机最远通信距离d,然后分别根据命令执行以下两种操作: "O p" (1 <= p <= N ...
- POJ-2236 Wireless Network 顺便讨论时间超限问题
Wireless Network Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 26131 Accepted: 108 ...
- 并查集 poj2236
网址:http://poj.org/problem?id=2236 题意:有n台坏的电脑,如果每两台电脑的距离不能超过d,那么这两台电脑有联系,用字符串O 表示标记第x台电脑维修了,用S判断从X到y是 ...
随机推荐
- Windows 提权对照表 精确到sp版本号
https://www.securitysift.com/download/MS_privesc_and_exploits_table.csv
- github新建托管项目及上传项目
一.新建托管项目 1.注册: 2.点击new repositories新建一个新项目: 3.输入项目名称及项目描述,Create repository: 4.点击右边栏的剪切板图标,记录下你的项目地址 ...
- shellcheck 帮助你写出更好的脚本
简介 shellcheck 是一款实用的 shell脚本静态检查工具. 首先,可以帮助你提前发现并修复简单的语法错误,节约时间.每次都需要运行才发现写错了一个小地方,确实非常浪费时间. 其次,可以针对 ...
- C++学习之路(五):复制构造函数与赋值运算符重载
之前没有细想过两者的区别,今天对此进行简要记录,后续完善补充. 复制构造函数是在类对象被创建时调用的,但是赋值运算符是被已经存在的对象调用完成赋值操作. 复制构造函数只在对象实例化时才被调用,即在复制 ...
- ifa_local 和 ifa_address
ifa_local 和 ifa_address区别联系: 1. 在配置了支持广播的接口上,与IFA_LOCAL一样,同样表示本地ip地址: 2. 对于点对点链路,IFA_ADDRESS表示的是对端的地 ...
- linux中没有dos2UNIX或者UNIX2dos命令怎么解决办法
linux中没有dos2UNIX或者UNIX2dos命令怎么解决办法 http://blog.csdn.net/w616589292/article/details/38274475 dos2unix ...
- linux命令(30):touch命令
实例一:创建不存在的文件 touch test.log test1.log 实例二:更新log.log的时间和log2012.log时间戳相同 touch -r test.log test1.log ...
- ConcurrentHashMap的使用
http://blog.csdn.net/gjt19910817/article/details/47353909 Long oldValue, newValue; while(true) { old ...
- Restful Framework 初识
目录 一.什么是RESTful 二.什么是API 三.RESTful API规范 四.基于Django实现API 五.基于Django Rest Framework框架实现 一. 什么是RESTful ...
- hdu 1081(最大子矩阵)
To The Max Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...