Submission

Status:

[PP-SSSSSSS]

Subtask/Task Score:

{0/100}

Score: 0

User: someone

Problemset: รัฐบาล

Language: cpp

Time: 0.002 second

Submitted On: 2026-01-21 10:47:08

#include<bits/stdc++.h>
#define ll long long
#define f first
#define s second
using namespace std;

vector<ll> dsu;

ll find(ll x) {
    if (dsu[x] == x) return x;
    else return dsu[x] = find(dsu[x]);
}

int main() {
    ll n, m;
    cin >> n >> m;
    vector<pair<ll, pair<ll, ll>>> edges;
    vector<int> used;
    pair<ll, ll> ans = {0, 1e9};
    for (ll i = 0 ; i < m ; i++) {
        ll src, dest, w;
        cin >> src >> dest >> w;
        edges.push_back({w, {src, dest}});
    }
    sort(edges.begin(), edges.end());
    dsu.resize(n+1);
    // cout << dsu.size() << endl;
    for (ll i = 1 ; i <= n ; i++) dsu[i] = i;
    int cnt = 0;
    for (int i = 0 ; i < m ; i++) {
        ll w = edges[i].f;
        ll a = edges[i].s.f;
        ll b = edges[i].s.s;
        ll roota = find(a);
        ll rootb = find(b);
        if (roota != rootb) {
            ans.f += w;
            dsu[a] = rootb;
            used.push_back(i);
            cnt++;
        }
        if (cnt == n-1) break;
    }
    for (int i = 0 ; i < used.size() ; i++) {
        ll sum = 0;
        cnt = 0;
        for (int o = 1 ; o <= n ; o++) dsu[o] = o;
        for (int j = 0 ; j < m ; j++) {
            if (used[i] == j) continue;
            ll w = edges[j].f;
            ll a = edges[j].s.f;
            ll b = edges[j].s.s;
            ll roota = find(a);
            ll rootb = find(b);
            if (roota != rootb) {
                sum += w;
                dsu[a] = rootb;
                cnt++;
            }
            if (cnt == n-1) break;
        }
        if (sum <= ans.f) continue;
        ans.s = min(ans.s, sum);
    }
    cout << ans.f << ' ' << ans.s;
}