题目链接

https://www.acwing.com/problem/content/4269/

思路

因为n的范围为1k,那么我们可以提前将每一个点在d范围内的所有点存储起来,这个也就是一条还不清楚能否连接的边,我们再用一个vis[i]vis[i]vis[i]记录一下当前第i台电脑是否开机。关于这些电脑之间的关系我们可以通过并查集维护在同一个集合中的电脑,我们现在有两种操作:

  • 'O’操作:将p电脑开机
  • 'S’操作:查询p和q是否在一个集合中

那么前面提到了我们通过并查集维护这个数据关系,对于第一种操作,我们就将p电脑周围所有的开机的电脑合并(merge操作)并将当前的电脑标记为开机,对于第二种操作我们直接查询p电脑和q电脑是否是同一个集合中即可

代码

#include<bits/stdc++.h>
using namespace std;
//----------------自定义部分----------------
#define ll long long
#define mod 1000000007
#define endl "\n"
#define PII pair<int,int>
#define INF 0x3f3f3f3fint dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};ll ksm(ll a,ll b) {ll ans = 1;for(;b;b>>=1LL) {if(b & 1) ans = ans * a % mod;a = a * a % mod;}return ans;
}ll lowbit(ll x){return -x & x;}const int N = 1e3+10;
//----------------自定义部分----------------
ll t,n,d,m,fa[N];struct Point{ll x,y;
};
vector<Point> V;
vector<int> E[N];
bool vis[N];ll find(ll x){ll t = x;while(t != fa[t]) t = fa[t];while(x != fa[x]){ll temp = fa[x];fa[x] = t;x = temp;}return x;
}bool is_in(Point a,Point b){ll x = (a.x - b.x),y = (a.y - b.y);ll len = x * x + y * y;return len <= d * d;
}void init(){ll x,y;V.clear();V.push_back({0,0});for(int i = 1;i <= n; ++i) {vis[i] = false;fa[i] = i;cin>>x>>y;V.push_back({x,y});E[i].clear();}for(int i = 1;i <= n; ++i) {for(int j = 1;j <= n; ++j) {if(i == j) continue;if(is_in(V[i],V[j])) E[i].push_back(j);}}
}void slove(){init();char op;while(cin>>op) {ll u,v,k;if(op == 'O'){cin>>u;k = find(u);for(int i = 0,l = E[u].size();i < l; ++i) {if(!vis[E[u][i]]) continue;v = find(E[u][i]);if(k != v) fa[v] = k;}vis[u] = true;}else{cin>>u>>v;u = find(u),v = find(v);if(u == v)cout<<"SUCCESS"<<endl;elsecout<<"FAIL"<<endl;}}
}int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);while(cin>>n>>d){slove();}return 0;
}

无线网络(预处理+并查集)相关推荐

  1. 无线网络 - 并查集

    题目描述 一场地震在东南亚发生了.不幸的是ACM组织通过电脑建立的无线网络遭到了毁灭性的影响-–网络中所有的电脑都损坏了.在陆续的维修电脑之后,无线网络有逐渐开始再一次运作了.由于硬件的制约,每两台电 ...

  2. leetcode1319. 连通网络的操作次数(并查集)

    用以太网线缆将 n 台计算机连接成一个网络,计算机的编号从 0 到 n-1.线缆用 connections 表示,其中 connections[i] = [a, b] 连接了计算机 a 和 b. 网络 ...

  3. LeetCode 1319. 连通网络的操作次数(BFS/DFS/并查集)

    文章目录 1. 题目 2. 解题 2.1 BFS 2.2 DFS 2.3 并查集 1. 题目 用以太网线缆将 n 台计算机连接成一个网络,计算机的编号从 0 到 n-1. 线缆用 connection ...

  4. 2017 西安网络赛A Tree(树上静态查询,带权并查集,矩阵乘法压位,好题)

    题目链接 题意: 给出 \(n(n \leq 3000)\) 个结点的一棵树,树上每个结点有一个 \(64 \times 64\) 的 \(0,1\)矩阵,每个结点上的矩阵是根据输入的 \(seed\ ...

  5. win7查不到网络计算机,Win7笔记本电脑搜不到无线网络(Wifi)怎么办?

    有时候我们打开笔记本电脑却找不到发现笔记本搜索不到任何无线网络(WIFI)信号,那么这时我们该怎么办呢,现在就和大家分享笔记本电脑搜索不到无线网络信号的解决办法,希望可以帮到大家. 笔记本电脑一台 能 ...

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

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

  7. (并查集)Wireless Network

    问题: 地震发生在东南亚. ACM(亚洲合作医疗团队)已经与膝上电脑建立了无线网络,但是一次意外的余震袭击,网络中的所有计算机都被打破了.计算机一个接一个地修复,网络逐渐开始工作.由于硬件限制,每台计 ...

  8. 智能交通系统(ITS)的无线网络技术

    1.引言 智能交通系统(Intelligent Transportation System,简称ITS)是一种集多种计算机与通信技术为一体的应用于交通系统的管理和控制的综合技术.ITS可以使交通系统更 ...

  9. kali linux网络扫描~无线网络扫描

    理论知识 无线网络是一种特殊的局域网,也就是人们常说的Wi-Fi网络,由于它采用无线方式传输数据,所以采用方式也不同 无线网络是采用无线通信技术实现的网络 无线网络既包括允许用户建立远距离无线连接的全 ...

最新文章

  1. 框架有几层_如何设计一个自动化框架
  2. C#中ref和out的原理
  3. NOI 2015 品酒大会
  4. JDK内置工具--jconsole
  5. Python Django 一对一多表查询关联表字段
  6. P3700-[CQOI2017]小Q的表格【分块,欧拉函数】
  7. NOIP 2010 引水入城
  8. python实现一对一聊天_vue+django实现一对一聊天功能
  9. 产品原型设计5:移动App原型设计神器 - POP(Prototyping on Paper)
  10. Lumia 830 win10m 启用触摸按键
  11. win8计算机背景黑色,Win8电脑桌面背景突然变黑怎么办?
  12. 小蜜蜂(动态规划dp)
  13. 监控录像数据恢复方法步骤详解
  14. 服务器被攻击被DDoS攻击该怎么办呢
  15. 常见的几种生命周期模型及其适用范围
  16. [Android]DDMS查看app保存的Sqlite数据库db文件和db升级
  17. 附件携马之CS免杀shellcode过国内主流杀软
  18. vue生成app二维码,并扫码下载app
  19. Ubuntu卸载、安装
  20. 期末安卓习题--第七章

热门文章

  1. VSCode中使用Git忽略提交代码设置
  2. 问题:Cannot assign a device for operation Variable
  3. linux 停止正在执行的shell 程序
  4. vs2005配置OpenCv2.3.1
  5. screen乱码问题
  6. 子树大小平衡树(SizeBalancedTree,SBT)——模板
  7. 2. Android Basic 搭建Android开发环境
  8. 2008年6月6日今天终于调回公司本部啦,记录历史的一天。
  9. 快速实现一个简单的canvas迷宫游戏
  10. 你真的懂病毒式营销吗