Submission
Status:
[PPPPPPPPPP]
Subtask/Task Score:
{100/100}
Score: 100
User: krittaphot
Problemset: รัฐบาล
Language: cpp
Time: 0.007 second
Submitted On: 2026-03-06 23:05:53
#include <bits/stdc++.h>
using namespace std;
int find_parent(int node,vector<int> &parent){
if(parent[node] == node){
return node;
}
return parent[node] = find_parent(parent[node],parent);
}
int dfs(int start,int stop,vector<vector<pair<int,int>>> &adj,int mx,int parent){
if(start == stop){
return mx;
}
for(int i = 0;i<adj[start].size();i++){
int v = adj[start][i].first;
int w = adj[start][i].second;
if(v == parent) continue;
int res = dfs(v,stop,adj,max(mx,w),start);
if(res != -1) return res;
}
return -1;
}
int main()
{
int n,m;
cin >> n >> m;
vector<pair<int,pair<int,int>>> edges;
vector<vector<pair<int,int>>> adj(n+1);
vector<int> use(m,0);
vector<int> parent(n+1);
for(int i = 0;i<=n;i++){
parent[i] = i;
}
for(int i = 0;i<m;i++){
int a,b,w;
cin >> a >> b >> w;
edges.push_back({w,{a,b}});
}
sort(edges.begin(),edges.end());
int sum = 0;
for(int i = 0;i<m;i++){
int cost = edges[i].first;
int a = edges[i].second.first;
int b = edges[i].second.second;
int A = find_parent(a,parent);
int B = find_parent(b,parent);
if(A != B){
sum += cost;
parent[A] = B;
adj[a].push_back({b,cost});
adj[b].push_back({a,cost});
use[i] = 1;
}
}
int diff = INT_MAX;
for(int i = 0;i<m;i++){
if(!use[i]){
int cost = edges[i].first;
int a = edges[i].second.first;
int b = edges[i].second.second;
int mx = dfs(a,b,adj,-1,-1);
diff = min(diff,cost - mx);
}
}
cout << sum << " " << sum+diff;
// cout << sum;
}