zoukankan      html  css  js  c++  java
  • 洛谷P2078 朋友 题解 并查集

    题目链接:https://www.luogu.com.cn/problem/P2078

    解题思路:
    执行两次并查集。
    第一次计算和小明认识的男生数量 (cnt1)
    第二次计算和小红认识的女生数量 (cnt2)
    答案就是 (min (cnt1, cnt2))

    实现代码如下:

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn = 10010, maxm = maxn*2;
    int n, m, s, t, f[maxn];
    struct Edge {
        int u, v, w;
    } edge[maxm];
    bool cmp(Edge a, Edge b) {
        return a.w < b.w;
    }
    void init() {
        for (int i = 1; i <= n; i ++) f[i] = i;
    }
    int Find(int x) {
        return x == f[x] ? x : f[x] = Find(f[x]);
    }
    void Union(int x, int y) {
        int a = Find(x), b = Find(y);
        f[a] = f[b] = f[x] = f[y] = min(a, b);
    }
    int main() {
        cin >> n >> m >> s >> t;
        init();
        for (int i = 0; i < m; i ++) cin >> edge[i].u >> edge[i].v >> edge[i].w;
        sort(edge, edge+m, cmp);
        for (int i = 0; i < m; i ++) {
            Union(edge[i].u, edge[i].v);
            if (Find(s) == Find(t)) {
                cout << edge[i].w << endl;
                break;
            }
        }
        return 0;
    }
    
  • 相关阅读:

    (luogu)[模板]最长公共子序列
    表达式的值
    邮票面值设计
    尼克的任务
    HISTOGRA
    消防局的设立
    青蛙的约会
    产生数
    奇怪的电梯
  • 原文地址:https://www.cnblogs.com/quanjun/p/12340668.html
Copyright © 2011-2022 走看看