Cod sursa(job #2255736)

Utilizator flibiaVisanu Cristian flibia Data 7 octombrie 2018 15:22:35
Problema Arbore partial de cost minim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <bits/stdc++.h>
#define ll long long

using namespace std;

//ifstream in("tst.in");
ifstream in("apm.in");
ofstream out("apm.out");

struct edge{
	int x, y, c;
};

int n, m, c, x, y, dad[200100], vf;
edge E[400100], st[200100];

bool cmp(const edge &a, const edge &b){
	return a.c < b.c;
}

int find(int p){
	return (p == dad[p] ? p : dad[p] = find(dad[p]));
}

void join(int x, int y){
	dad[find(x)] = find(y);
}

int main(){
	in >> n >> m;
	for(int i = 1; i <= n; i++)
		dad[i] = i;
	for(int i = 1; i <= m; i++)
		in >> E[i].x >> E[i].y >> E[i].c;
	sort(E + 1, E + m + 1, cmp);
	int ans = 0;
	for(int i = 1; i <= m; i++){
		x = E[i].x;
		y = E[i].y;
		c = E[i].c;
		if(find(x) == find(y))
			continue;
		ans += c;
		join(x, y);
		st[++vf] = E[i];
	} 
	out << ans << '\n' << n - 1;
	for(int i = 1; i < n; i++)
		out << '\n' << st[i].x << ' ' << st[i].y;
	return 0; 
}