题意:有很多无线电站台分别位于平面的坐标上,可以直接联系或间接联系,直接联系即两点距离小于等于d,间接联系就是通过其他电台联系,初始所有电台都是坏的,给出一系列操作,修复某电台,以及询问某两座电台是否能够联系。

先根据各个电台的坐标建立修复后可以直接联系的边,然后每修好一个,就遍历与它可以直接联系的电台,若也是修好的就合并并查集。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 using namespace std;
 6
 7 int xx[1005],yy[1005];
 8 int fa[1005],n;
 9 bool vis[1005];
10 int head[1005],point[1005*1005],nxt[1005*1005],size;
11
12 void add(int a,int b){
13     point[size]=b;
14     nxt[size]=head[a];
15     head[a]=size++;
16 }
17
18 void init(){
19     for(int i=1;i<=n;i++)fa[i]=i;
20 }
21
22 int find(int x){
23     int r=x,t;
24     while(r!=fa[r])r=fa[r];
25     while(x!=r){
26         t=fa[x];
27         fa[x]=r;
28         x=t;
29     }
30     return r;
31 }
32
33 int main(){
34     int d;
35     scanf("%d%d",&n,&d);
36     int i,j;
37     memset(head,-1,sizeof(head));
38     size=0;
39     for(i=1;i<=n;i++){
40         scanf("%d%d",&xx[i],&yy[i]);
41         for(j=1;j<i;j++){
42             if((xx[i]-xx[j])*(xx[i]-xx[j])+(yy[i]-yy[j])*(yy[i]-yy[j])<=d*d){
43                 add(i,j);
44                 add(j,i);
45             }
46         }
47     }
48     init();
49     char s[10];
50     while(scanf("%s",s)!=EOF){
51         if(s[0]=='O'){
52             int a;
53             scanf("%d",&a);
54             vis[a]=1;
55             for(i=head[a];~i;i=nxt[i]){
56                 int j=point[i];
57                 if(vis[j]){
58                     int x=find(a),y=find(j);
59                     if(x!=y)fa[x]=y;
60                 }
61             }
62         }
63         else if(s[0]=='S'){
64             int a,b;
65             scanf("%d%d",&a,&b);
66             int x=find(a),y=find(b);
67             if(x==y)printf("SUCCESS\n");
68             else printf("FAIL\n");
69         }
70     }
71 }

View Code

转载于:https://www.cnblogs.com/cenariusxz/p/4788776.html

poj2236 并查集相关推荐

  1. POJ2236(并查集)

    题目:http://poj.org/problem?id=2236 题意:给定n个点的坐标,然后选出其中的一些点出来,问在这些点中的指定的两点是否连通. #include <iostream&g ...

  2. 并查集入门三连:HDU1213 POJ1611 POJ2236

    HDU1213 http://acm.hdu.edu.cn/showproblem.php?pid=1213 问题描述 今天是伊格纳修斯的生日.他邀请了很多朋友.现在是晚餐时间.伊格纳修斯想知道他至少 ...

  3. java并查集计算机网络连通,poj2236 Wireless Network(并查集)

    题意:有n台损坏的电脑,现要将其逐台修复,且使其相互恢复通信功能.若两台电脑能相互通信,则有两种情况,一是他们之间的距离小于d,二是他们可以借助都可到达的第三台已修复的电脑.给出所有电脑的坐标位置,对 ...

  4. 并查集入门+初级专题训练

    介绍   摘自罗勇军,郭卫斌的<算法竞赛入门到进阶>上的说明:   并查集(Disjoint Set)是一种非常精巧而且食用的数据结构,它主要用于处理一些不相交集合的合并问题.经典的例子有 ...

  5. 并查集c++代码_[Leetcode 每日精选](本周主题-并查集) 547. 朋友圈

    题目难度: 中等 原题链接 今天继续来做并查集的问题, 这道题仍然比较基础, 而且也是个比较接近现实的问题了. 大家在我的公众号"每日精选算法题"中的聊天框中回复 并查集 就能看到 ...

  6. HDU1811 Rank of Tetris 拓扑排序+并查集 OR 差分约束最短路+并查集

    题目链接 题意:就是给你一堆关系,看能不能排出个确定的顺序 做法: 1. 拓扑排序+并查集 应该很容易想到的一种思路,大于小于建立单向边.对于相等的呢,就把他们缩成一个点.就用并查集缩成一个点就行了 ...

  7. HDU 2586 How far away ? LCA ---tanjar+并查集 离线算法

    tanjar算法离线求LCA的思想主要是利用并查集的思想. 求距离的话就是d[start[i]]+end[en[i]]-2*d[lca[i]]; 首先从根节点dfs,在深度遍历的回溯的过程中不断的更新 ...

  8. POJ - 2513 Colored Sticks 欧拉通路+并查集+静态树

    一开始想用map来搞,但是感觉好复杂,然后想了一下看大佬们用trie做的,感觉十分合理就敲了一发. 一开始re,数组要开到550000 只会静态的字典树,在每个根节点看是否出现过改颜色,如果没有就把该 ...

  9. 关于 并查集(union find) 算法基本原理 以及 其 在分布式图场景的应用

    二月的最后一篇水文-想写一些有意思的东西. 文章目录 环检测在图数据结构中的应用 深度/广度优先 检测环 并查集数据结构 (Union-Find) 基本概念 初始化 合并 union 查找祖先 优化1 ...

  10. 【BZOJ1015】【JSOI2008】星球大战 并查集

    题目大意 给你一张\(n\)个点\(m\)条边的无向图,有\(q\)次操作,每次删掉一个点以及和这个点相邻的边,求最开始和每次删完点后的连通块个数. \(q\leq n\leq 400000,m\le ...

最新文章

  1. 西湖大学鞠峰组招聘微生物组学、病毒组学与生物信息学博士后
  2. IE 11 预览版初体验
  3. 利用构造函数进行简化类初始化
  4. 图像检索:layer选择与fine-tuning性能提升验证
  5. 基于RTMP的实时流媒体的QoE分析
  6. 841. 钥匙和房间
  7. pandas 提取某几列_用pandas做数据清洗,我一般都这么干
  8. MATLAB—隐函数绘图
  9. c语言英文背单词软件下载,英语百词斩下载,背单词最好的软件排名?
  10. app应用软件开发流程是怎样的?
  11. HDU 6627 equation(模拟,分类讨论)
  12. android 将app添加进入文件的打开方式
  13. javamail,XMail轻松实现发送邮件
  14. Dovecot的API简单学习使用
  15. js实现数字动态递增效果
  16. 非标常用焊接工艺应用
  17. Android开发之打包APK详解
  18. 经典算法--韩信点兵
  19. Android版本第五人格,第五人格九游版
  20. 大数据风控---互信息及Python实现

热门文章

  1. 安装mysql 错误重新安装
  2. Oracle函数--合并,替换,拼接,截取,查找
  3. java cell设置绝对位置_java操作excel在开始位置添加一列
  4. Win10 无法保存对hosts权限所作的更改 拒绝访问
  5. windows10中安装anaconda和pytorch
  6. UOS系统JAVA应用在任务栏显示类名的问题跟踪调用
  7. 使用定位技术,边界判断要谨慎
  8. 提供了一个UBUNTU安装NVIDIA驱动的脚本的下载
  9. 净空法师质疑,人的生命真的变长了吗
  10. 办公软件在多屏宽屏上的应用设想