Submission

Status:

[PPPPPPPPPP]

Subtask/Task Score:

{100/100}

Score: 100

User: august

Problemset: รัฐบาล

Language: cpp

Time: 0.004 second

Submitted On: 2026-03-15 20:33:49

#include <bits/stdc++.h>
using namespace std;

int fnd(int u, vector<int> &par) {
    if (par[u] == u) return u;
    return par[u] = fnd(par[u], par);
}

int main() {
    cin.tie(0)->sync_with_stdio(0);
    int n,m;
    cin>> n>> m;

    vector<pair<int, pair<int,int>>> g;
    for (int i=0; i<m; i++) {
        int u,v,w;
        cin>> u>> v>> w;

        g.push_back({w, {u,v}});
    }

    sort(g.begin(), g.end());
    int ans1=0, ans2=INT_MAX;
    vector<int> par(n+1);
    iota(par.begin(), par.end(), 0);
    

    vector<int> span;
    for (int i=0; i<m; i++) {
        int u=g[i].second.first, v=g[i].second.second, w=g[i].first;

        int a=fnd(u, par);
        int b=fnd(v, par);
        if (a!=b) {
            ans1+=w;
            span.push_back(i);
            par[a]=b;
        }
    }

    for (auto &id : span) {
        int tem=0, compo = n;
        vector<int> par2(n+1);
        iota(par2.begin(), par2.end(), 0);

        for (int i=0; i<m; i++) {
            if (i == id) continue;

            int u=g[i].second.first, v=g[i].second.second, w=g[i].first;

            int a=fnd(u, par2);
            int b=fnd(v, par2);
            if (a!=b) {
                tem+=w;
                compo--;
                par2[a]=b;
            }
        }
        //cout<< tem<< ' '<< g[id].first<< '\n';
        if (compo == 1) ans2 = min(ans2, tem);
    }
    cout<< ans1<< ' '<< ans2;
}