Submission
Status:
[PPPPPPPPPP]
Subtask/Task Score:
{100/100}
Score: 100
User: nemuchannnUwU
Problemset: รัฐบาล
Language: cpp
Time: 0.004 second
Submitted On: 2026-03-13 16:49:43
#include<bits/stdc++.h>
using namespace std;
vector<int> parent;
int find(int x){
if (parent[x]==x) return x;
return parent[x]=find(parent[x]);
}
bool unite(int u,int v){
u=find(u);
v=find(v);
if (u==v) return false;
parent[u]=v;
return true;;
}
int main(){
cin.tie(nullptr)->sync_with_stdio(0);
int n,m; cin >> n >> m;
parent=vector<int> (n+1);
for (int i=1;i<=n;i++){
parent[i]=i;
}
vector<vector<int>> edges(m+1,vector<int> (3));
for (int i=1;i<=m;i++){
cin >> edges[i][0] >> edges[i][1] >> edges[i][2];
}
sort(edges.begin(),edges.end(),[](const vector<int> &a,const vector<int> &b){
return a[2]<b[2];
});
int first=0;
vector<int> used;
for (int i=1;i<=m;i++){
int u=edges[i][0];
int v=edges[i][1];
int w=edges[i][2];
if (unite(u,v)){
first+=w;
used.push_back(i);
}
}
int second=INT_MAX;
for (int ban : used){
for (int i=1;i<=n;i++){
parent[i]=i;
}
int cnt=0;
int temp=0;
for (int i=1;i<=m;i++){
if (ban==i) continue;
int u=edges[i][0];
int v=edges[i][1];
int w=edges[i][2];
if (unite(u,v)){
temp+=w;
cnt++;
}
}
if (cnt==n-1) second=min(second,temp);
}
cout << first << " " << second;
}