Wireless Network POJ - 2236 (并查集)
- #include<iostream>
- #include<vector>
- #include<string>
- #include<cmath>
- #include<algorithm>
- #include<cstdio>
- #include<cstring>
- using namespace std;
- int n, d;
- double dis[][];
- struct Point
- {
- double x, y;
- }cur[];
- int Tree[];
- int findRoot(int x)
- {
- if(Tree[x] == -)
- return x;
- int tmp = findRoot(Tree[x]);
- Tree[x] = tmp;
- return tmp;
- }
- int main()
- {
- scanf("%d %d", &n, &d);
- for(int i = ; i <= n; ++i)
- {
- Tree[i] = -;
- double x, y;
- scanf("%lf %lf", &x, &y);
- cur[i].x = x;
- cur[i].y = y;
- }
- for(int i = ; i <= n; ++i)
- for(int j = i; j <= n; ++j)
- {
- dis[i][j] = dis[j][i] = sqrt((cur[i].x - cur[j].x)*(cur[i].x - cur[j].x)+(cur[i].y - cur[j].y)*(cur[i].y - cur[j].y));
- }
- vector<int> rep; // repaired
- char c;
- while(scanf("%c", &c) != EOF)
- {
- if(c == 'O')
- {
- int t;
- scanf("%d", &t);
- for(int i = ; i < rep.size(); ++i)
- {
- if(dis[rep[i]][t] <= d)
- {
- /* 不能这样写,否则会导致并查集的树结构不好,
- 路径压缩次数过多,导致RuntimeError(栈溢出)
- int ri = findRoot(rep[i]);
- Tree[ri] = t;
- */
- // 标准写法
- int ri = findRoot(rep[i]);
- int rt = findRoot(t);
- if(ri != rt)
- Tree[ri] = rt;
- }
- }
- rep.push_back(t);
- }
- else if(c == 'S')
- {
- int t1, t2;
- scanf("%d %d", &t1, &t2);
- int rt1 = findRoot(t1);
- int rt2 = findRoot(t2);
- if(rt1 == rt2)
- printf("SUCCESS\n");
- else
- printf("FAIL\n");
- }
- }
- return ;
- }
Wireless Network POJ - 2236 (并查集)的更多相关文章
- POJ 2236 Wireless Network 第一次做并查集,第一次写博客
题意是判断两台电脑是否能通讯,两台修好的电脑距离在指定距离内可直接通讯,且两台修好的电脑能通过一台修好的电脑间接通讯.代码如下: #include <iostream> #include ...
- Day5 - B - Wireless Network POJ - 2236
An earthquake takes place in Southeast Asia. The ACM (Asia Cooperated Medical team) have set up a wi ...
- poj 2236 并查集
并查集水题 #include<cstdio> #include<iostream> #include<algorithm> #include<cstring& ...
- Wireless Network(POJ 2236)
Wireless Network Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 20724 Accepted: 871 ...
- A - Wireless Network POJ - 2236
题目大意:有n台坏掉的电脑,给出每台电脑的坐标,然后每次询问输入0(字符) x,表示电脑x恢复正常,输入S x y 询问x和y是否可以联网.只要是x和y的距离小于距离d,那么就可以联网,如果有个中介c ...
- (并查集) Wireless Network --POJ --2236
链接: http://poj.org/problem?id=2236 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82830#probl ...
- DisJSet:Wireless Network(POJ 2236)
无线电网络 题目大意:就是地震后,所有的电脑都坏了,现在可以修复,而且要重新连成一个网络,两台电脑之间最大连接距离为D,两台电脑可以有中继电脑,按O修复电脑,按S测试两台电脑是否有链接,如果有就输 ...
- A - Wireless Network POJ - 2236-kuangbin带你飞
A - Wireless Network POJ - 2236 Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 50348 ...
- poj 1984 并查集
题目意思是一个图中,只有上下左右四个方向的边.给出这样的一些边, 求任意指定的2个节点之间的距离. 就是看不懂,怎么破 /* POJ 1984 并查集 */ #include <stdio.h& ...
随机推荐
- 廖雪峰Java15JDBC编程-2SQL入门-2insert/select/update/delete
1. INSERT用于向数据库的表中插入1条记录 insert into 表名 (字段1,字段2,...) values (数据1,数据2,数据3...) 示例 -- 如果表存在,就删除 drop t ...
- SCOI2015
这周各种头疼,一直睡觉+发呆,啥子都没干. 就补一下之前的东西. d1t1小凸玩矩阵 传送门 一开始脑子抽写了最小费用最大流,不知道自己怎么想的. 第k大最小,明显的二分,又是二分图,二分第k大值,把 ...
- 【BZOJ 1257】[CQOI2007]余数之和sum
一道LLJ说他吃*的题. 我实在是太愚蠢了. 传送门
- 07_Hibernate多事务并发运行时并发问题检索方式
什么是事务? 事务(Transaction)是并发控制的单位,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位. 事务就是逻辑上的一组操作,要么全都成功,要么全都失败 ...
- 795. Number of Subarrays with Bounded Maximum
数学的方式 是对于所有的字符分成简单的三类 0 小于 L 1 LR 之间 2 大于R 也就是再求 不包含 2 但是包含1 的子数组个数 不包含2的子数组个数好求 对于连续的相邻的n个 非2类数 就有 ...
- vue swiper点击后返回不能自动播放
解决方法: 在返回时重新开启轮播 组件中: <swiper :options="swiperOption" ref="mySwiper" :class=& ...
- python基础-迭代器
1.迭代:指的是一个重复的过程,每一次重复称为一次迭代,并且每一次重复的结果 是下一次重复的初始值 2.为什么要有迭代器 对于序列类型:str list tuple 可以依赖索引来迭代取值,但是对于d ...
- 最小费用最大流——EK+SPFA
终于把最小费用最大流学会了啊-- 各种奇奇怪怪的解释我已经看多了,但在某些大佬的指点下,我终于会了. 原来是个好水的东西. 最小费用最大流是什么? 不可能不知道网络流吧?如果不知道,自行百度去-- 费 ...
- vue 学习 一
1.实例: var vm = new Vue({ el: '#example', data: { a:1 }, created: function () { // `this` 指向 vm 实例 co ...
- LUOGU P2675 《瞿葩的数字游戏》T3-三角圣地
题面 解题思路 手推可以得出,最后每个数字的贡献其实就是第n行杨辉三角数,然后直接卢卡斯直接算(今天才找到lucas定理时间复杂度是log n,log以模数为底).代码略麻烦,不想改了. 代码 #in ...