Wireless Network——简单并查集
时间:2019-09-29
本文章向大家介绍Wireless Network——简单并查集,主要包括Wireless Network——简单并查集使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目链接
题意:
有n台电脑,x,y代表电脑坐标 ,两台修好的电脑如果距离<=d就可以联网, O p 代表 修理p电脑 S p q代表链接p q
题解:
并查集维护即可,在O操作下,在已经修好的电脑里面找到与当前电脑距离<=d 的,join()一下
代码:
#include<iostream> #include<stdio.h> #include<math.h> using namespace std; typedef long long ll; const int maxn=5e5+5; int f[maxn]; int n,d; int dx[maxn],dy[maxn]; int tmp[maxn]; int Find(int x) { return x==f[x]?x:f[x]=Find(f[x]); } void join(int x,int y) { int fx=Find(x); int fy=Find(y); if(fx!=fy) { f[fx]=fy; } } double dis(int a,int b) { return sqrt((double)((dx[a]-dx[b])*(dx[a]-dx[b])+(dy[a]-dy[b])*(dy[a]-dy[b]))); } int main() { scanf("%d%d",&n,&d); for(int i=1;i<=n;i++)scanf("%d%d",&dx[i],&dy[i]); for(int i=1;i<=n;i++)f[i]=i; char op; int p,q; int cnt=0; while(cin>>op) { if(op=='O') { scanf("%d",&p); tmp[cnt++]=p; for(int i=0;i<cnt;i++) { if(dis(tmp[i],p)<=(double)d)join(tmp[i],p); } } else { scanf("%d%d",&p,&q); if(Find(p)==Find(q))printf("SUCCESS\n"); else printf("FAIL\n"); } } return 0; }
原文地址:https://www.cnblogs.com/j666/p/11609973.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 小解c# foreach原理
- 多包依赖管理--Lerna
- Flume概述
- Flume中常见的组件
- 程序员进阶之算法练习(四十八)LeetCode
- [C#]不通过事件方式获取键盘按钮按下的状态
- 15.深入k8s:Event事件处理及其源码分析
- SwiftUI:使用计时器重复触发事件
- SwiftUI:获取应用进入后台的通知
- Windows格式化namenode报错 - Error: JAVA_HOME is incorrectly set. Please update F:hadoopconfhadoop-e...
- Windows格式化namenode报错 - ERROR namenode.NameNode: Failed to start namenode.
- Windows启动HDFS报错 - 系统找不到文件 hadoop。
- Windows启动HDFS报错 - org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z
- Windows启动HDFS报错 - Could not locate Hadoop executable: E:soft_workhadoop-2.6.0binwinutils.exe
- Windows中jps命令无法查看java进程问题