哪个dalao帮我看看怎么回事才10分?!!
查看原帖
哪个dalao帮我看看怎么回事才10分?!!
285414
Swiftie_wyc22楼主2021/11/4 17:05
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

struct edge{
    int u, v, t;
    edge(int a, int b, int c)
    {
        u = a;
        v = b;
        t = c;
    }
};
vector<edge>e;
int fa[2001]; // Disjoint set


bool cmp(edge a, edge b)
{
    return a.t < b.t;
}

void init(int n)
{
    for (int i = 0; i <= n; i++)
    {
        fa[i] = i;
    }
}
int find_fa(int x)
{
    // path compress
    if (fa[x] != x)
    {
        fa[x] = find_fa(fa[x]);
    }
    return fa[x];
}
void merge(int x, int y)
{
    x = find_fa(x);
    y = find_fa(y);
    if (x != y)
        fa[y] = x;
}

int main()
{
    int n, m, uu, vv, tt;
    cin >> n >> m;
    init(n + 10);
    for (int i = 1; i <= m; i++)
    {
        cin >> uu >> vv >> tt;
        e.push_back(edge(uu, vv, tt));
    }
    stable_sort(e.begin(), e.end(), cmp);
    for (int i = 0; i < e.size(); i++)
    {
        if (fa[e[i].u] != fa[e[i].v])
        {
            merge(e[i].u, e[i].v);
            n--;
	        if (n == 1)
	        {
	            cout << e[i].t << endl;
	            return 0;
	        }
        }
    }
    cout << -1 << endl;
    return 0;
}

就是用并查集,只过了第一个点,样例也是对的,但是不知道为什么wa剩下九个

2021/11/4 17:05
加载中...