算法训练 | 图论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;
}
相关推荐
秋难降31 分钟前
贪心算法:看似精明的 “短视选手”,用好了也能逆袭!💥
java·算法
xtmatao37 分钟前
WIN11+VSCODE搭建c/c++开发环境
c语言·c++·vscode
没故事的燕同学39 分钟前
C++递推
算法
一只自律的鸡42 分钟前
STL之vector
开发语言·c++·算法
梁下轻语的秋缘1 小时前
每日c/c++题 备战蓝桥杯(P2240 【深基12.例1】部分背包问题)
c语言·c++·蓝桥杯
GEEK零零七1 小时前
Leetcode 159. 至多包含两个不同字符的最长子串
算法·leetcode·滑动窗口
zh_xuan2 小时前
c++ typeid运算符
开发语言·c++
四季如春2 小时前
C++基础 - 001 - 语言基础
c++
MindTechBuilder2 小时前
实时通信的深度技术剖析
算法
EutoCool2 小时前
【项目】在线OJ(负载均衡式)
运维·c++·stl·负载均衡