Submission

Status:

[PPPPPPPPPP]

Subtask/Task Score:

{100/100}

Score: 100

User: 12345678

Problemset: รัฐบาล

Language: cpp

Time: 0.003 second

Submitted On: 2025-11-18 10:34:31

#include <bits/stdc++.h>

using namespace std;

const int nx=105, ex=1e4+5;

int n, m, u, v, w, dsu[nx], mx[nx][nx], cst, sec=INT_MAX;
vector<tuple<int ,int, int>> edg, unused;
vector<pair<int ,int>> d[nx];

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

void fillmx(int u, int p, int rt, int curmx)
{
    mx[rt][u]=curmx;
    for (auto [v, w]:d[u]) if (v!=p) fillmx(v, u, rt, max(curmx, w));
}

int main()
{
    cin.tie(NULL)->sync_with_stdio(false);
    cin>>n>>m;
    for (int i=1; i<=m; i++) cin>>u>>v>>w, edg.push_back({w, u, v});
    for (int i=1; i<=n; i++) dsu[i]=i;
    sort(edg.begin(), edg.end());
    for (auto [w, u, v]:edg)
    {
        if (find(u)==find(v)) unused.push_back({w, u, v});
        else cst+=w, dsu[find(u)]=find(v), d[u].push_back({v, w}), d[v].push_back({u, w});
    }
    for (int i=1; i<=n; i++) fillmx(i, i, i, 0);
    for (auto [w, u, v]:unused) sec=min(sec, cst+w-mx[u][v]);
    cout<<cst<<' '<<sec;
}