Submission

Status:

[PPPPPPPPPP]

Subtask/Task Score:

{100/100}

Score: 100

User: VggT

Problemset: รัฐบาล

Language: cpp

Time: 0.006 second

Submitted On: 2026-03-13 19:16:36

#include <bits/stdc++.h>
using namespace std;

vector<int> parent;

int find(int num)
{
	if(parent[num] == num) return num;
	return parent[num] = find(parent[num]);
}

bool unite(int x, int y)
{
	int BossX = find(x);
	int BossY = find(y);
	if(BossX != BossY)
	{
		parent[BossY] = BossX;
		return true;
	}
	return false;
}

void mst(vector<vector<int>> &graph, int n)
{
	sort(graph.begin(),graph.end());
	vector<int> usedindex;
	int ans1 = 0;
	int ans2 = INT_MAX;
	int temp = n;
	
	
	for(int i = 0; i < n; i+=1) parent[i] = i;
	
	for(int i = 0; i < graph.size(); i+=1)
	{
		if(temp-1 <= 0) break;
		int u = graph[i][1];
		int v = graph[i][2];
		int dist = graph[i][0];
		if(unite(u,v))
		{
			
			ans1+=dist;
			temp-=1;
			usedindex.push_back(i);
		}	
	}
	
	for(int i = 0; i < usedindex.size(); i+=1)
	{
		parent.assign(n,0);
		temp = n;
		int sum = 0;
		for(int k = 0; k < n; k+=1) parent[k] = k;
		for(int j = 0; j < graph.size(); j+=1)
		{
			if(j == usedindex[i]) continue;
			int u = graph[j][1];
			int v = graph[j][2];
			int dist = graph[j][0];
			if(unite(u,v))
			{
				
				sum+=dist;
				temp-=1;
			}
		}
		if(temp-1 == 0)
		{
			ans2=min(ans2,sum);
		}
		
	}
	
	cout << ans1 << ' ' << ans2;
}

int main()
{
	int n, m; cin >> n >> m;
	vector<vector<int>> graph;
	parent.resize(n,0);
	
	
	for(int i = 0; i < m; i+=1)
	{
		int u,v,dist;
		cin >> u >> v >> dist;
		u-=1; v-=1;
		graph.push_back({dist,u,v});
	}
	
	
	mst(graph,n);
	
	
	return 0;
}