Submission
Status:
[PPPPPPPPPP]
Subtask/Task Score:
{100/100}
Score: 100
User: mantaggez
Problemset: รัฐบาล
Language: cpp
Time: 0.004 second
Submitted On: 2026-03-12 15:14:28
#include <bits/stdc++.h>
using namespace std;
using pii = pair<int, int>;
using tup = tuple<int, int, int, int>;
const int nx = 105;
const int INF = 1e9;
int n, m, dsu[nx], d1 = INF, d2 = INF;
vector<tup> edge;
vector<int> bad;
int find(int x)
{
if(dsu[x] == x) return x;
dsu[x] = find(dsu[x]);
return dsu[x];
}
int MST(int skip)
{
int sum = 0, cnt = 0;
iota(dsu, dsu + nx, 0);
for(auto& [w, u, v, idx] : edge)
{
if(idx == skip) continue;
int pu = find(u), pv = find(v);
if(pu != pv)
{
dsu[pu] = pv;
sum += w;
cnt++;
if(skip == -1) bad.push_back(idx);
}
}
return (cnt == n - 1 ? sum : INF);
}
int main()
{
cin.tie(NULL)->sync_with_stdio(false);
cin >> n >> m;
for(int i=0;i<m;i++)
{
int u, v, w;
cin >> u >> v >> w;
edge.push_back({w, u, v, i});
}
sort(edge.begin(), edge.end());
d1 = MST(-1);
for(auto& idx : bad) d2 = min(d2, MST(idx));
cout << d1 << ' ' << d2 ;
return 0;
}