Submission
Status:
[PPPPPPP-SS]
Score: 0
User: Jayss
Problemset: รัฐบาล
Language: cpp
Time: 0.009 second
Submitted On: 2025-04-19 20:32:09
#include <bits/stdc++.h>
using namespace std;
const int N = 105;
struct Edge {
int u, v, w;
bool operator < (const Edge &rhs) const {
return w < rhs.w;
}
};
int pa[N], n, m;
vector<Edge> graph;
int find(int u) {
if (pa[u] == u) return u;
return pa[u] = find(pa[u]);
}
vector<int> dist;
void kruskal(Edge no) {
for (int i = 1;i <= n;i++) pa[i] = i;
int cpn = n;
int sum = 0;
for (Edge e : graph) {
if (e.u == no.u && e.v == no.v && e.w == no.w) continue;
int a = find(e.u), b = find(e.v);
if (a == b) continue;
pa[b] = a;
sum += e.w;
cpn--;
if (cpn == 1) break;
}
if (cpn == 1) dist.push_back(sum);
}
int main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin >> n >> m;
while (m--) {
int u, v, w; cin >> u >> v >> w;
graph.push_back({u, v, w});
}
sort(graph.begin(), graph.end());
kruskal({-1, -1, -1});
for (Edge e : graph) kruskal(e);
sort(dist.begin(), dist.end());
dist.resize(unique(dist.begin(), dist.end()) - dist.begin());
cout << dist[0] << ' ' << dist[1];
return 0;
}