10pts求助
查看原帖
10pts求助
575655
Chtholly_is_cute楼主2024/7/27 13:53

code:

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 100;
struct edge
{
    int u, v;
    int val;
} eset[N];
int n, m, a[N / 5], b[N / 5];
int find(int x) { return a[x] == x ? x : a[x] = find(a[x]); }
void merge(int p, int b) { a[find(p)] = find(b); }
bool check(int x, int y) { return find(x) == find(y); }
bool cmp(edge x, edge y) { return x.val > y.val; }
int main()
{
    cin >> n >> m;
    for (int i = 1; i < N / 5 - 1; i++)
        a[i] = i;
    for (int i = 1; i <= m; i++)
        cin >> eset[i].u >> eset[i].v >> eset[i].val;
    sort(eset + 1, eset + n + 1, cmp);
    for (int i = 1; i <= m + 1; i++)
    {
        if (check(eset[i].u, eset[i].v))
        {
            cout << eset[i].val;
            break;
        }
        else
        {
            if (!b[eset[i].u])
                b[eset[i].u] = eset[i].v;
            else
                merge(b[eset[i].u], eset[i].v);
            if (!b[eset[i].v])
                b[eset[i].v] = eset[i].u;
            else
                merge(b[eset[i].v], eset[i].u);
        }
    }
    return 0;
}
2024/7/27 13:53
加载中...