IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 奶酪(巧用并查集) -> 正文阅读

[数据结构与算法]奶酪(巧用并查集)

原题

在这里插入图片描述

思路

  • 从题意来看明显可以使用宽搜
  • 但是也可以从集合的角度应用并查集求解(从大佬的博客受到启发)
  • 将能连在一起的洞看作一个集合
  • 最后判断是否有一对通向底部并且通向顶部的点在同一个集合
  • 有的话即课满组题意所需条件

代码

#include<bits/stdc++.h>

using namespace std;

const int N = 1010;
typedef long long ll;
//不用long long会爆掉

ll n, m, t;
ll x[N], y[N], z[N];
ll p[N];
ll f1[N], f2[N];

ll findx(ll x)
{
    if(p[x] != x) p[x] = findx(p[x]);
    return p[x];
}

ll get_dist(ll a1, ll a2, ll a3, ll b1, ll b2, ll b3)
{
    return (a1 - b1) * (a1 - b1) + (a2 - b2) * (a2 - b2) + (a3 - b3) * (a3 - b3);
}

int main()
{
    cin >> t;

    while(t --)
    {
        ll n, h, r;
        cin >> n >> h >> r;
        ll top = 0, bom = 0;

        for(ll i = 1; i <= n; i ++) p[i] = i;

        for(ll i = 1; i <= n; i ++)
        {
            cin >> x[i] >> y[i] >> z[i];

            if(z[i] - r <= 0)
            {
                f1[bom ++] = i;
            }
            if(z[i] + r >= h)
            {
                top ++;
                f2[top ++] = i;
            }

            for(ll j = 1; j <= i; j ++)
            {
                if((x[i] - x[j])*(x[i] - x[j]) + (y[i] - y[j]) * (y[i] - y[j]) > 4 * r * r) continue;
                if(get_dist(x[i], y[i], z[i], x[j], y[j], z[j]) <= 4 * r * r)
                {
                    ll a = findx(i), b = findx(j);
                    if(a != b) p[a] = b;
                }
            }
        }

        ll s = 0;
        for(ll i = 0; i < top; i ++)
        {
            for(ll j = 0; j < bom; j ++)
            {
                if(findx(f1[j]) == findx(f2[i]))
                {
                    s = 1;
                    break;
                }
            }
            if(s) break;
        }

        if(s) puts("Yes");
        else puts("No");
    }

    return 0;
}
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-04-04 12:36:03  更:2022-04-04 12:39:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 9:33:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码