算法训练 | 图论Part5 | 107. 寻找存在的路径

目录

[107. 寻找存在的路径](#107. 寻找存在的路径)

并查集法


107. 寻找存在的路径

并查集法
  • 代码一:并查集
cpp 复制代码
#include <iostream>
#include <vector>
using namespace std;

int n; // 节点数量
vector<int> father = vector<int> (101, 0); // 按照节点大小定义数组大小

// 并查集初始化
void init() {
    for (int i = 1; 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 m, s, t, source, destination;
    cin >> n >> m;
    init();
    while (m--) {
        cin >> s >> t;
        join(s, t);
    }
    cin >> source >> destination;
    if (isSame(source, destination)) cout << 1 << endl;
    else cout << 0 << endl;
}
相关推荐
挨踢ren5 小时前
单例模式:C++实现与多线程安全
c++·设计模式
he___H5 小时前
算法快与慢--哈希+双指针
算法·leetcode·哈希算法
呃呃本5 小时前
算法题(回溯)
算法
用户805533698035 小时前
现代Qt开发教程(新手篇)1.14——日志
c++·qt
刀法如飞5 小时前
Rust数组去重的20种实现方式,AI时代用不同思路解决问题
人工智能·算法·ai编程
yxc_inspire5 小时前
25年CCPC福建邀请赛补题
学习·算法
Raink老师5 小时前
用100道题拿下你的算法面试(链表篇-4):合并 K 个有序链表
算法·链表·面试
Liangwei Lin6 小时前
LeetCode 20. 有效的括号
算法
艾莉丝努力练剑6 小时前
【Linux网络】Linux 网络编程入门:TCP Socket 编程(下)
linux·运维·服务器·网络·c++·tcp/ip
宵时待雨6 小时前
linux笔记归纳4:进程概念
linux·运维·服务器·c++·笔记