poj2236 并查集
题意:有很多无线电站台分别位于平面的坐标上,可以直接联系或间接联系,直接联系即两点距离小于等于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 并查集相关推荐
- POJ2236(并查集)
题目:http://poj.org/problem?id=2236 题意:给定n个点的坐标,然后选出其中的一些点出来,问在这些点中的指定的两点是否连通. #include <iostream&g ...
- 并查集入门三连:HDU1213 POJ1611 POJ2236
HDU1213 http://acm.hdu.edu.cn/showproblem.php?pid=1213 问题描述 今天是伊格纳修斯的生日.他邀请了很多朋友.现在是晚餐时间.伊格纳修斯想知道他至少 ...
- java并查集计算机网络连通,poj2236 Wireless Network(并查集)
题意:有n台损坏的电脑,现要将其逐台修复,且使其相互恢复通信功能.若两台电脑能相互通信,则有两种情况,一是他们之间的距离小于d,二是他们可以借助都可到达的第三台已修复的电脑.给出所有电脑的坐标位置,对 ...
- 并查集入门+初级专题训练
介绍 摘自罗勇军,郭卫斌的<算法竞赛入门到进阶>上的说明: 并查集(Disjoint Set)是一种非常精巧而且食用的数据结构,它主要用于处理一些不相交集合的合并问题.经典的例子有 ...
- 并查集c++代码_[Leetcode 每日精选](本周主题-并查集) 547. 朋友圈
题目难度: 中等 原题链接 今天继续来做并查集的问题, 这道题仍然比较基础, 而且也是个比较接近现实的问题了. 大家在我的公众号"每日精选算法题"中的聊天框中回复 并查集 就能看到 ...
- HDU1811 Rank of Tetris 拓扑排序+并查集 OR 差分约束最短路+并查集
题目链接 题意:就是给你一堆关系,看能不能排出个确定的顺序 做法: 1. 拓扑排序+并查集 应该很容易想到的一种思路,大于小于建立单向边.对于相等的呢,就把他们缩成一个点.就用并查集缩成一个点就行了 ...
- HDU 2586 How far away ? LCA ---tanjar+并查集 离线算法
tanjar算法离线求LCA的思想主要是利用并查集的思想. 求距离的话就是d[start[i]]+end[en[i]]-2*d[lca[i]]; 首先从根节点dfs,在深度遍历的回溯的过程中不断的更新 ...
- POJ - 2513 Colored Sticks 欧拉通路+并查集+静态树
一开始想用map来搞,但是感觉好复杂,然后想了一下看大佬们用trie做的,感觉十分合理就敲了一发. 一开始re,数组要开到550000 只会静态的字典树,在每个根节点看是否出现过改颜色,如果没有就把该 ...
- 关于 并查集(union find) 算法基本原理 以及 其 在分布式图场景的应用
二月的最后一篇水文-想写一些有意思的东西. 文章目录 环检测在图数据结构中的应用 深度/广度优先 检测环 并查集数据结构 (Union-Find) 基本概念 初始化 合并 union 查找祖先 优化1 ...
- 【BZOJ1015】【JSOI2008】星球大战 并查集
题目大意 给你一张\(n\)个点\(m\)条边的无向图,有\(q\)次操作,每次删掉一个点以及和这个点相邻的边,求最开始和每次删完点后的连通块个数. \(q\leq n\leq 400000,m\le ...
最新文章
- 西湖大学鞠峰组招聘微生物组学、病毒组学与生物信息学博士后
- IE 11 预览版初体验
- 利用构造函数进行简化类初始化
- 图像检索:layer选择与fine-tuning性能提升验证
- 基于RTMP的实时流媒体的QoE分析
- 841. 钥匙和房间
- pandas 提取某几列_用pandas做数据清洗,我一般都这么干
- MATLAB—隐函数绘图
- c语言英文背单词软件下载,英语百词斩下载,背单词最好的软件排名?
- app应用软件开发流程是怎样的?
- HDU 6627 equation(模拟,分类讨论)
- android 将app添加进入文件的打开方式
- javamail,XMail轻松实现发送邮件
- Dovecot的API简单学习使用
- js实现数字动态递增效果
- 非标常用焊接工艺应用
- Android开发之打包APK详解
- 经典算法--韩信点兵
- Android版本第五人格,第五人格九游版
- 大数据风控---互信息及Python实现