poj 2236 网络连接问题 并查集
题意:n台电脑,当两台之间的距离小于d的时候可以连接。 题目会进行操作“修复”还有“查询是否已经连接”。只要在查询的时候输出YES或者ON
思路:
- 把可以相互连接的 即两者之间的距离小于 d q[i].push_back(j) 还有 q[j].push_back(i) 这里面的q为动态数组 q[i]存储的是可以与i相连的机器
- 每台机器的初始根节点为i
- 修复操作的时候,进行更改根节点,如果i,j都已经被修复了,那么i j就可以连到同一个根节点上面
- 查询操作的时候,如果两者都在同一个根节点,就说明连接成功,否则连接失败
解决问题的代码:
#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
#include <string.h>
using namespace std;
const int N = ;
int x[N], y[N], fa[N];
bool p[N];
vector<int> v[N];
int Find(int x)
{
if (fa[x] == x) return x;
return fa[x] = Find(fa[x]);
}
int main()
{
int n, d;
char s[];
memset(p, , sizeof(p));
scanf("%d%d", &n, &d);
for (int i = ; i <= n; i++)
{
scanf("%d%d", &x[i], &y[i]);
fa[i] = i;
}
for (int i = ; i <= n; i++)
for (int j = i + ; j <= n; j++)
if (((x[i] - x[j])*(x[i] - x[j]) + (y[i] - y[j])*(y[i] - y[j])) <= d * d)
{
v[i].push_back(j); v[j].push_back(i);
}
while (~scanf("%s", s))
{
int a, b;
if (s[] == '')
{
scanf("%d", &a);
p[a] = true;
for (int i = ; i < v[i].size(); i++)
{
if (p[v[a][i]])
{
b = Find(v[a][i]);
fa[b] = a;
}
}
}
else
{
scanf("%d%d", &a, &b);
int dx = Find(a);
int dy = Find(b);
if (dx == dy)
printf("SUCCESS\n");
else printf("FAIL\n");
}
}
}
poj 2236 网络连接问题 并查集的更多相关文章
- poj 2236:Wireless Network(并查集,提高题)
Wireless Network Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 16065 Accepted: 677 ...
- POJ 2236 Wireless Network (并查集)
Wireless Network 题目链接: http://acm.hust.edu.cn/vjudge/contest/123393#problem/A Description An earthqu ...
- POJ 2236 Wireless Network(并查集)
传送门 Wireless Network Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 24513 Accepted ...
- poj 2236 Wireless Network 【并查集】
Wireless Network Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 16832 Accepted: 706 ...
- poj 1182:食物链(种类并查集,食物链问题)
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 44168 Accepted: 12878 Description ...
- POJ 1456 Supermarket 区间问题并查集||贪心
F - Supermarket Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Sub ...
- POJ 1182 食物链(种类并查集)
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 63592 Accepted: 18670 Description ...
- POJ 2762 tarjan缩点+并查集+度数
Going from u to v or from v to u? Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 15494 ...
- POJ 1182 (经典食物链 /并查集扩展)
(參考他人资料) 向量偏移--由"食物链"引发的总结 http://poj.org/problem?id=1182这道食物链题目是并查集的变型.非常久曾经做的一次是水过的,这次 ...
随机推荐
- 邮箱/邮件地址的正则表达式及分析(JavaScript,email,regex)
简言 在做用户注册时,常会用到邮箱/邮件地址的正则表达式.本文列举了几种方案,大家可以根据自己的项目情况,选择最适合的方案. 方案1 (常用) 规则定义如下: 以大写字母[A-Z].小写字母[a-z] ...
- Docker 给运行中的容器添加映射端口
方法1 1.获得容器IP 将container_name 换成实际环境中的容器名 docker inspect `container_name` | grep IPAddress 2. iptable ...
- Jenkins系列——使用SonarQube进行代码质量检查
1.目标 之前已经写过一篇关于Jenkins和SonarQube的一篇博客<jenkins集成sonar>,本文在参考前文的基础上,做了详细的补充. 使用SonarQube进行代码质量检查 ...
- log4cpp安装使用
1. 主页:http://log4cpp.sourceforge.net“Log4cpp is library of C++ classes for flexible logging to files ...
- informix服务端卸载后重新安装不成功
可能原因: 1.实例未删除 2.配置文件未删除 安装成功后远程客户端连接不上问题: 1..如果自己设置的数据库实例报错,换一个数据库实例(database)试试,例如sysadmin
- javase基础-Helloword
public class HelloWorld {//创建一个类 :1.类名首字母需要大写:2.类名必须和文件名一致 public static void main(String[] ...
- hdu 3466 Proud Merchants 自豪的商人(01背包,微变形)
题意: 要买一些东西,每件东西有价格和价值,但是买得到的前提是身上的钱要比该东西价格多出一定的量,否则不卖.给出身上的钱和所有东西的3个属性,求最大总价值. 思路: 1)WA思路:与01背包差不多,d ...
- 洛谷 P2380 狗哥采矿
题目背景 又是一节平静的语文课 狗哥闲来无事,出来了这么一道题 题目描述 一个n*m的矩阵中,每个格子内有两种矿yeyenum和bloggium,并且知道它们在每个格子内的数量是多少.最北边有blog ...
- 不写画面的网页程序设计,Web API、Web Service、WCF Service
客户有一个系统,经常要连上我方,查询数据 以前的作法是给对方一个账号,让他可以连上我们的DB来查询. 所以,早期的同仁,真的给他们DB链接字符串 客户的Windows程序.网站就真的靠这么危险的方式, ...
- Angularjs 列表页面筛选
个人博客链接:http://blog.yangqiong.com.cn/angularjs-lie-biao-ye-mian-shai-xuan/ 需求:页面URL和查询结果保持一致,当筛选条件变化时 ...