当前位置: 首页 > news >正文

代码随想录算法【Day54】

108. 冗余连接

思路

从前向后遍历每一条边(因为优先让前面的边连上),边的两个节点如果不在同一个集合,就加入集合(即:同一个根节点)。

代码

#include <iostream>
#include <vector>
using namespace std;
int n; // 节点数量
vector<int> father(1001, 0); // 按照节点大小范围定义数组

// 并查集初始化
void init() {
    for (int i = 0; i <= n; ++i) {
        father[i] = i;
    }
}
// 并查集里寻根的过程
int find(int u) {
    return u == father[u] ? u : father[u] = find(father[u]);
}
// 判断 u 和 v是否找到同一个根
bool isSame(int u, int v) {
    u = find(u);
    v = find(v);
    return u == v;
}
// 将v->u 这条边加入并查集
void join(int u, int v) {
    u = find(u); // 寻找u的根
    v = find(v); // 寻找v的根
    if (u == v) return ; // 如果发现根相同,则说明在一个集合,不用两个节点相连直接返回
    father[v] = u;
}

int main() {
    int s, t;
    cin >> n;
    init();
    for (int i = 0; i < n; i++) {
        cin >> s >> t;
        if (isSame(s, t)) {
            cout << s << " " << t << endl;
            return 0;
        } else {
            join(s, t);
        }
    }
}

相关文章:

  • 系统架构设计:软件测试需要掌握的常用方法
  • pytorch阶段性总结1
  • 前端模拟请求池-浏览器同时发起大量请求
  • mysql 拼接多行合并为一行
  • 入门网络安全工程师要学习哪些内容【2025年寒假最新学习计划】
  • 机试刷题_HJ106 字符逆序【python】
  • 【实战 ES】实战 Elasticsearch:快速上手与深度实践-1.1.2典型应用场景:日志分析、实时搜索、推荐系统
  • Redis|事务
  • 网络七层模型—OSI参考模型详解
  • Fiddler在Windows下抓包Https
  • HGAME2025 Week1
  • 尚硅谷爬虫note13
  • 一张表解释01背包问题
  • js:根据后端返回的数组取出每一个数组的keyword字段然后拼接成一个逗号分隔的字符串
  • 总结前端常用数据结构 之 栈篇【JavaScript 】
  • ipe网络安全
  • 30.C++多态 3 (多态的原理,虚指针,虚函数表,抽象类)
  • Python学习第十七天之PyTorch保姆级安装
  • 数据结构与算法-图论-最短路-拓展运用
  • CSDN年度评选揭晓,永洪科技AI技术与智能应用双星闪耀
  • 特朗普将启的中东行会如何影响伊美核谈判?专家分析
  • 社恐也能嗨起来,《孤独摇滚》千人观影齐舞荧光棒
  • 梅花奖在上海|朱洁静:穿越了人生暴风雨,舞台是最好良药
  • 第四轮伊美核谈判将于11日在阿曼举行
  • 工行回应两售出金条发现疑似杂质:情况不属实,疑似杂质应为金条售出后的外部附着物
  • 国家发改委副主任谈民营经济促进法:以法治的稳定性增强发展的确定性