Submission

Status:

[PPPPPPPPPP]

Subtask/Task Score:

{100/100}

Score: 100

User: erng

Problemset: รัฐบาล

Language: cpp

Time: 0.005 second

Submitted On: 2026-03-08 22:23:18

#include <bits/stdc++.h>

using namespace std;

#define ll long long

const ll nx=105;
ll n, m, x, y, z, dsu[nx], l[nx][nx], ans, c, use[nx], ans2, cnt, second;
// priority_queue<tuple<ll,ll,ll>, vector<tuple<ll,ll,ll>>, greater<tuple<ll,ll,ll>>> pq; 
vector<tuple<ll,ll,ll>> edges;
vector<ll> used;

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

int main()
{
    cin>>n>>m;
    for (int i=1; i<=n; i++) dsu[i]=i;
    for (int i=1; i<=m; i++)
    {
        cin>>x>>y>>z;
        edges.push_back({z, x, y});
    }
    sort(edges.begin(), edges.end());
    for (int i=0; i<edges.size(); i++)
    {
        auto [w, u, v]=edges[i];
        if (find(u)==find(v)) continue;
        ans+=w;
        dsu[find(u)]=dsu[find(v)];
        used.push_back(i);
    }
    second=4e18;
    for (int i=0; i<used.size(); i++)
    {
        cnt=0, ans2=0;
        for (int j=1; j<=n; j++) dsu[j]=j;
        for (int j=0; j<edges.size(); j++)
        {
            if (j==used[i]) continue;
            auto [w, u, v]=edges[j];
            if (find(u)==find(v)) continue;
            dsu[find(u)]=dsu[find(v)];
            ans2+=w;
            cnt++;
        }
        if (cnt==n-1) second=min(second, ans2);
    }
    cout<<ans<<" "<<second;
}