#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define pii pair <int , int>
#define arr3 array <int , 3>
using namespace std;
const int INF = 1e9 + 7;
const int maxn = 2e5 + 7;
struct DSU
{
    vector <int> parent;
    vector <int> sz;
    void init(int n)
    {
        parent.assign(n+5 , 0);
        sz.assign(n+5 , 0);
        for(int i = 1; i <= n; i++)
        {
            sz[i] = 1;
            parent[i] = i;
        }
    }
    int find_par(int u)
    {
        if(parent[u] == u) return u;
        return parent[u] = find_par(parent[u]);
    }
    void group(int u , int v)
    {
        u = find_par(u);
        v = find_par(v);
        if(u == v) return;
        if(sz[u] < sz[v]) swap(u , v);
        parent[v] = u;
        sz[u] += sz[v];
    }
    bool connected(int u , int v)
    {
        return (find_par(u) == find_par(v));
    }
};
int n , k , c[40][40];
vector <array <int , 3>> edge;
void solve()
{
    cin >> n >> k;
    DSU dsu; dsu.init(n);
    for(int i = 1; i <= n; i++)
    {
        for(int j = 1; j <= n; j++)
        {
            cin >> c[i][j];
            edge.push_back({c[i][j] , i , j});
        }
    }
    int ccc = n; // connected component counter
    int ans = 0;
    sort(edge.begin() , edge.end());
    for(array <int , 3> e: edge)
    {
        if(ccc <= k) break;
        int w = e[0];
        int u = e[1];
        int v = e[2];
        if(!dsu.connected(u , v))
        {
            dsu.group(u , v);
            ans += w;
            ccc--;
        }
    }
    cout << ans << '\n';
}
signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    solve();
    return 0;
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |