Submission

Status:

[PPPPPPPPPP]

Subtask/Task Score:

{100/100}

Score: 100

User: navysrimuang

Problemset: รัฐบาล

Language: cpp

Time: 0.005 second

Submitted On: 2026-03-19 09:56:39

#include<bits/stdc++.h>
#define pb push_back
using namespace std;
using ll = long long;
using tiii = tuple<int,int,int>;
using pii = pair<int,int>;

int n,m;
int cmp = 0;
int sum1 = 0;
int used[102][102];
vector<tiii> ed;
vector<vector<pii>> adj;

int dfs(int u,int t,int p,int mx){
	if(u == t) return mx;
	for(auto [w,v] : adj[u]){
		if(v == p) continue;
		int rs = dfs(v,t,u,max(w,mx));
		if(rs != -1) return rs;
	}
	return -1;
}
struct DSU{

	vector<int> par,sz;
	DSU(int n){
		par.resize(n); sz.resize(n,1);
		iota(par.begin(),par.end(),0);
	}

	int find(int x){
		if(par[x] == x) return x;
		else return par[x] = find(par[x]);
	}
	
	bool unite(int a,int b){
		int ra = find(a);
		int rb = find(b);
		if(ra == rb) return 0;
		if(sz[ra] < sz[rb]) swap(ra,rb);
		par[rb] = ra;
		sz[ra] += sz[rb];
		return 1;
	}
};
int main(){
	cin >> n >> m;
	adj.resize(n);
	for(int i = 0;i<m;i++){
		int a,b,c;
		cin >> a >> b >> c;
		a--;b--;
		ed.pb({c,a,b});
	}

	sort(ed.begin(),ed.end());
	DSU dsu(n);	
	for(auto [w,a,b] : ed){
		if(dsu.unite(a,b)){
			used[a][b] = used[b][a] = 1;
			adj[a].pb({w,b});
			adj[b].pb({w,a});
			sum1 += w;
			cmp++;	
		}	

		if(cmp == n-1) break;
	}
	int bst = INT_MAX;
	for(auto [w,a,b] : ed){
		if(used[a][b]) continue;
		int mx = dfs(a,b,-1,0);
		int ty = sum1 - mx + w;
		if(ty < bst){
			bst = ty;
		}	
	}
		
	cout << sum1 << " " << bst << "\n";
	return 0;
}