Mai intai trebuie sa te autentifici.

Cod sursa(job #2425347)

Utilizator AlexNecula99Necula Florin-Alexandru AlexNecula99 Data 24 mai 2019 18:54:37
Problema Arbore partial de cost minim Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.35 kb
#include <iostream>
#include <vector>
#include <queue>
#include <fstream>

using namespace std;

vector <int> graph[100005];
vector <int> graphC[100005];
int viz[100005];
priority_queue <pair<int, pair<int, int> > > myheap;
vector<pair<int,int> > apm;

int main()
{
	ifstream f("apm.in");
	ofstream g("apm.out");
	int n, m;
	f >> n >> m;
	int a, b, c;
	for (int i = 1; i <= m; i++)
	{
		f >> a >> b >> c;
		graph[a].push_back(b);
		graphC[a].push_back(c);
		graph[b].push_back(a);
		graphC[b].push_back(c);
	}
	viz[1] = 1;
	int lim = graph[1].size();
	for (int i = 0; i < lim; i++)
	{
		int vecin = graph[1][i];
		int cost = graphC[1][i];
		myheap.push(make_pair(-cost, make_pair(1, vecin)));
	}
	int costm = 0;
	int muchii = 0;
	while (!myheap.empty())
	{
		pair<int, pair<int, int> > best = myheap.top();
		myheap.pop();
		int index = best.second.second;
		if (viz[index])
			continue;
		viz[index] = 1;
		apm.push_back(best.second);
		muchii++;
		costm = costm - best.first;
		int lim = graph[index].size();
		for (int i = 0; i < lim; i++)
		{
			int vecin = graph[index][i];
			int cost = graph[index][i];
			myheap.push(make_pair(-cost, make_pair(index, vecin)));
		}
	}
	g << costm << "\n";
	g << muchii << "\n";
	for (int i = 0; i < muchii; i++)
		g << apm[i].first << " " << apm[i].second << "\n";
	return 0;
}