Submission
Status:
[PPPPPPPPPP]
Subtask/Task Score:
{100/100}
Score: 100
User: KantaponZ
Problemset: รัฐบาล
Language: cpp
Time: 0.004 second
Submitted On: 2025-08-24 23:42:07
#include <bits/stdc++.h>
using namespace std;
#define ll long long
struct Data {
int u, v, w;
bool operator<(const Data &o) const {
if (w != o.w) return w < o.w;
if (u != o.u) return u < o.u;
return v < o.v;
}
};
int N, M;
vector<Data> Edge;
vector<int> used;
int pa[105];
int ans1, ans2 = 1e9;
int fp(int n) {
if (pa[n] == n) return n;
return pa[n] = fp(pa[n]);
}
int main() {
ios_base::sync_with_stdio(0), cin.tie(0);
cin >> N >> M;
for (int i = 0; i < M; i++) {
int u, v, w;
cin >> u >> v >> w;
Edge.push_back({u, v, w});
}
sort(Edge.begin(), Edge.end());
// find the shortest cost
for (int i = 1; i <= N; i++) pa[i] = i;
for (int i = 0; i < Edge.size(); i++) {
auto [u, v, w] = Edge[i];
int pu = fp(u), pv = fp(v);
if (pu == pv) continue;
pa[pu] = pv;
used.emplace_back(i);
ans1 += w;
}
//find the second
for (int i = 0; i < used.size(); i++) {
int ct = 0, temp = 0;
for (int i = 1; i <= N; i++) pa[i] = i;
for (int j = 0; j < Edge.size(); j++) {
if (used[i] == j) continue;
auto [u, v, w] = Edge[j];
int pu = fp(u), pv = fp(v);
if (pu == pv) continue;
pa[pu] = pv;
temp += w;
ct++;
}
if (ct == N - 1 && temp >= ans1) {
ans2 = min(ans2, temp);
}
}
cout << ans1 << " " << ans2;
}