Submission
Status:
[PP-SSSSSSS]
Subtask/Task Score:
{0/100}
Score: 0
User: mantaggez
Problemset: รัฐบาล
Language: cpp
Time: 0.002 second
Submitted On: 2026-03-12 15:01:59
#include <bits/stdc++.h>
using namespace std;
using pii = pair<int, int>;
using tup = tuple<int, int, int>;
const int nx = 105;
const int INF = 1e9;
int n, m, dsu[nx], d1 = INF, d2 = INF;
vector<tup> edge, bad;
int find(int x)
{
if(dsu[x] == x) return x;
dsu[x] = find(dsu[x]);
return dsu[x];
}
int MST(tup e)
{
int sum = 0;
auto [bw, bu, bv] = e;
iota(dsu, dsu + nx, 0);
for(auto& [w, u, v] : edge)
{
int pu = find(u), pv = find(v);
if(w == bw && bu == u && bv == v) continue;
if(pu != pv)
{
dsu[pu] = pv;
sum += w;
if(bw == -1 && bu == -1 && bv == -1) bad.push_back({w, u, v});
}
}
return sum;
}
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});
}
sort(edge.begin(), edge.end());
d1 = MST({-1, -1, -1});
for(auto& [w, u, v] : bad) d2 = min(d2, MST({w, u, v}));
cout << d1 << ' ' << d2 ;
return 0;
}