POJ 2236 Wireless Network

加工并储存数据的数据结构

并查集

这是并查集的基本应用,两台修好的电脑若距离d内则加入合并。不过不小心的话会TLE,比如:

#include <iostream>
using namespace std; #define MAX_N 1001 + 16
int parent[MAX_N];
int height[MAX_N];
bool status[MAX_N];
int distance[MAX_N][MAX_N]; void init(const int& n)
{
for (int i = 0; i < n; ++i)
{
parent[i] = i;
height[i] = 0;
}
} int find(const int& x)
{
if (parent[x] == x)
{
return x;
}
else
{
return parent[x] = find(parent[x]);
}
} void unite(int x, int y)
{
x = find(x);
y = find(y);
if (x == y)
{
return;
} if (height[x] < height[y])
{
parent[x] = y;
}
else
{
parent[y] = x;
if (height[x] == height[y])
{
++height[x];
}
}
} bool same(const int& x, const int& y)
{
return find(x) == find(y);
} pair<int, int> computer[MAX_N];
int square(const int& x)
{
return x * x;
} int main(int argc, char *argv[])
{
int N, d;
cin >> N >> d;
for (int i = 0; i < N; ++i)
{
cin >> computer[i].first >> computer[i].second;
}
init(N);
char operation;
int x, y;
while (cin >> operation)
{
if (operation == 'O')
{
cin >> x;
--x;
status[x] = true;
for (int i = 0; i < N; ++i)
{
if (i == x)
{
continue;
}
if (status[i] && square(computer[x].first - computer[i].first) + square(computer[x].second - computer[i].second) <= square(d))
{
unite(x, i);
}
}
}
else
{
cin >> x >> y;
--x; --y;
if (same(x, y))
{
cout << "SUCCESS" << endl;
}
else
{
cout << "FAIL" << endl;
}
}
}
return 0;
}

平方计算太多了,初始化的时候算一次记录在一个二维数组中就够了。

#include<iostream>
#include<cstring>
#include<cmath>
using namespace std; #define ms(a,b) memset(a,b,sizeof(a));
const int maxn = 1010; int f[maxn];
int h[maxn];
pair<int, int>dis[maxn];
bool status[maxn];//电脑是否维修好了
bool able[maxn][maxn];//distance void init() {
for (int i = 0; i < maxn; ++i) f[i] = i, h[i] = 0;
} int find(int x) {
return f[x] == x ? x : f[x] = find(f[x]);
} void merge(int x, int y) {
x = find(x);
y = find(y);
if (x == y)return;
if (h[x] < h[y])f[x] = y;
else {
f[y] = x;
if (h[x] == h[y])++h[x];
}
} bool same(int a, int b) {
return find(a) == find(b);
} int square(int x) {
return x * x;
} int main() {
int N, d;
cin >> N >> d;
for (int i = 0; i < N; ++i)cin >> dis[i].first >> dis[i].second;
init();
for (int i = 0; i < N; ++i)for (int x = i; x < N; ++x)
if (square(dis[x].first - dis[i].first) + square(dis[x].second - dis[i].second) <= square(d))able[i][x] = able[x][i] = true;
char operation;
int x, y;
while (cin >> operation) {
if (operation == 'O') {
cin >> x; --x;
status[x] = true;
for (int i = 0; i < N; ++i){
if (i == x) continue;
if (status[i] && able[x][i]) merge(x, i);
}
}
else {
cin >> x >> y;
--x, --y;
if(same(x,y))cout << "SUCCESS" << endl;
else cout << "FAIL" << endl;
}
}
return 0;
}

POJ: 2236 Wireless Network 题解的更多相关文章

  1. POJ 2236 Wireless Network ||POJ 1703 Find them, Catch them 并查集

    POJ 2236 Wireless Network http://poj.org/problem?id=2236 题目大意: 给你N台损坏的电脑坐标,这些电脑只能与不超过距离d的电脑通信,但如果x和y ...

  2. [并查集] POJ 2236 Wireless Network

    Wireless Network Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 25022   Accepted: 103 ...

  3. poj 2236:Wireless Network(并查集,提高题)

    Wireless Network Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 16065   Accepted: 677 ...

  4. POJ 2236 Wireless Network (并查集)

    Wireless Network 题目链接: http://acm.hust.edu.cn/vjudge/contest/123393#problem/A Description An earthqu ...

  5. POJ 2236 Wireless Network(并查集)

    传送门  Wireless Network Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 24513   Accepted ...

  6. POJ 2236 Wireless Network (并查集)

    Wireless Network Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 18066   Accepted: 761 ...

  7. poj 2236 Wireless Network 【并查集】

    Wireless Network Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 16832   Accepted: 706 ...

  8. POJ 2236 Wireless Network [并查集+几何坐标 ]

    An earthquake takes place in Southeast Asia. The ACM (Asia Cooperated Medical team) have set up a wi ...

  9. poj 2236 Wireless Network (并查集)

    链接:http://poj.org/problem?id=2236 题意: 有一个计算机网络,n台计算机全部坏了,给你两种操作: 1.O x 修复第x台计算机 2.S x,y 判断两台计算机是否联通 ...

  10. [ An Ac a Day ^_^ ] [kuangbin带你飞]专题五 并查集 POJ 2236 Wireless Network

    题意: 一次地震震坏了所有网点 现在开始修复它们 有N个点 距离为d的网点可以进行通信 O p   代表p点已经修复 S p q 代表询问p q之间是否能够通信 思路: 基础并查集 每次修复一个点重新 ...

随机推荐

  1. Util应用框架基础(七) - 缓存

    本节介绍Util应用框架如何操作缓存. 概述 缓存是提升性能的关键手段之一. 除了提升性能,缓存对系统健壮性和安全性也有影响. 不同类型的系统对缓存的依赖程度不同. 对于后台管理系统,由于是给管理人员 ...

  2. 数据分析师如何做好PPT

    作为一名数据分析师,制作出色的PPT是非常重要的技能之一.一个好的PPT可以让你的数据洞察更加生动有趣,并有效传达给观众.以下是一些详细的步骤和技巧,帮助你成为一名擅长制作PPT的数据分析师: 确定目 ...

  3. MongoDB (操作数据库,操作集合,操作文档)的笔记

    https://www.bilibili.com/video/BV1gV411H7jN/?spm_id_from=333.999.0.0&vd_source=92305fa48ea41cb7b ...

  4. Springboot的Container Images,docker加springboot

    Spring Boot应用程序可以使用Dockerfiles容器化,或者使用Cloud Native Buildpacks来创建优化的docker兼容的容器映像,您可以在任何地方运行. 1. Effi ...

  5. Head First Java学习:第十一章-异常处理

    第十一章 异常处理 1.方法可以抓住其他方法所抛出的异常:异常总是丢回给调用方 有风险.会抛出异常的程序代码: 负责声明异常:创建Exception对象并抛出 调用该方法的程序代码: 在try中调用程 ...

  6. Critical error detected c0000374

    我发现出现上述错误是 free 两次内存 float* dd=new float[2]; delete[] dd; delete[] dd;

  7. vue星星评分

    <template> <div> <div class="xx"> <div v-for="(i, index) in list ...

  8. MySQL基础篇:第七章_详解mysql存储过程&函数

    存储过程 含义:一组经过预先编译的sql语句的集合 好处: 1.提高了sql语句的重用性,减少了开发程序员的压力 2.提高了效率 3.减少了传输次数 分类: 1.无返回无参 2.仅仅带in类型,无返回 ...

  9. 实战案例丨使用云连接CC和数据复制服务DRS实现跨区域RDS迁移和数据同步

    摘要:实践案例展示如何使用云连接CC和数据复制服务DRS实现跨区域RDS迁移和数据同步. [业务场景及诉求] 希望将不同区域"华北-北京四"的rds与"亚太-新加坡&qu ...

  10. 论文解读丨CIKM'22 MARINA:An MLP-Attention Model for Multivariate Time-Series Analysis

    摘要:华为云数据库创新Lab在论文<MARINA: An MLP-Attention Model for Multivariate Time-Series Analysis>中提出了华为自 ...