Cod sursa(job #2427411)

Utilizator leo281099Ionescu Leonard Octavian leo281099 Data 31 mai 2019 19:56:52
Problema Arbore partial de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <iostream>
#include <fstream>
#include <set>

using namespace std;

ifstream f("apm.in");
ofstream g("apm.out");

const int N = 400001;
set < pair <int, pair< int, int > > > graf;
int n, m, costtotal;
int sef[N];

int find(int x) {
	if (sef[x] == x) return x;
	sef[x] = find(sef[x]);
	return sef[x];
}

int main()
{
	f >> n >> m;
	int x, y, c;
	for (int i = 1; i <= m; i++) {
		f >> x >> y >> c;
		graf.insert(make_pair(c, make_pair(x, y)));
	}
	for (int i = 1; i <= n; i++)
		sef[i] = i;
	for (auto i = graf.begin(); i != graf.end();) {
		int c1 = i->second.first;
		int c2 = i->second.second;
		c1 = find(c1);
		c2 = find(c2);
		if (c1 != c2) {
			costtotal += i->first;
			sef[c2] = c1;
			i++;
		}
		else
			i = graf.erase(i);
	}
	g << costtotal << '\n' << graf.size() << '\n';
	for (auto i = graf.begin(); i != graf.end(); i++) {
		g << i->second.first << ' ' << i->second.second << '\n';
	}
	return 0;
}