Cod sursa(job #692828)

Utilizator lucian666Vasilut Lucian lucian666 Data 26 februarie 2012 19:59:28
Problema Arbore partial de cost minim Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include<fstream>
#include<algorithm>
using namespace std;
ofstream out("apm.out");
struct muchie
{
	int x,y,c;
};
muchie v[400001];
int n,m,uz[200001],poz[400001],nr,s;
bool cmp(muchie a,muchie b)
{
	if(b.c>a.c)
		return true;
	return false;
}
void citire();
void kruskal();
void afis();
int main()
{
	citire();
	sort(v+1,v+m+1,cmp);
	kruskal();
	afis();
	return 0;
}
void citire()
{
	ifstream in("apm.in");
	in>>n>>m;
	int i,j,c,z;
	for(z=1;z<=m;z++)
	{
		in>>i>>j>>c;
		v[z].x=i;
		v[z].y=j;
		v[z].c=c;
	}
}
void kruskal()
{
	int i,j;
	for(i=1;i<=n;i++)
		uz[i]=i;
	for(i=1;i<=m;i++)
		if(uz[v[i].x]!=uz[v[i].y])
		{
			s+=v[i].c;
			poz[++nr]=i;
			int aa=max(uz[v[i].x],uz[v[i].y]);
			int bb=min(uz[v[i].x],uz[v[i].y]);
			for(j=1;j<=n;j++)
				if(uz[j]==bb)
					uz[j]=aa;
		}
}
void afis()
{
	out<<s<<'\n';
	out<<nr<<'\n';
	for(int i=1;i<n;i++)
		out<<v[poz[i]].x<<" "<<v[poz[i]].y<<" "<<'\n';
}