1 条题解

  • 0
    @ 2024-11-13 9:39:05
    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N = 1e4 + 10, INF = 0x3f3f3f3f, MOD = 1E9 + 7;
    int n, m, x, p[N];
    struct Node {
        int u, v, w;
        bool operator<(const Node& r) const { return w < r.w; }
    } g[N << 1];
    
    int find(int u) {
        return u == p[u] ? u : p[u] = find(p[u]);
    }
    void kruskal() {
        for (int i = 0; i <= n; i++)
            p[i] = i;
        sort(g + 1, g + 1 + m);
        int ans = 0, cnt = 0;
        for (int i = 1; i <= m; i++) {
            int u = g[i].u, v = g[i].v, w = g[i].w;
            int fu = find(u), fv = find(v);
            if (fu != fv)
                p[fu] = fv, ans += w, cnt++;
        }
        if (cnt != n - 1)
            ans = -1;
        cout << ans << endl;
    }
    int main(int argc, char* argv[]) {
        cin >> n;
        for (int i = 1; i <= n; i++)
            for (int j = 1; j <= n; j++) {
                cin >> x;
                g[++m] = {i, j, x};
                g[++m] = {j, i, x};
            }
        kruskal();
        return 0;
    }
    
    • 1

    信息

    ID
    353
    时间
    1000ms
    内存
    128MiB
    难度
    1
    标签
    递交数
    118
    已通过
    79
    上传者