Cod sursa(job #342347)

Utilizator bog29Antohi Bogdan bog29 Data 21 august 2009 13:14:27
Problema Arbore partial de cost minim Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include<fstream>
#define dmax 200003
#define mmax 400003
using namespace std;
ifstream in("apm.in");
ofstream out("apm.out");
int n,m,c[dmax],apm[dmax],nrm=1,cm;
struct m
{	int p1;
	int p2;
	int c;
}	g[mmax];
typedef int (*compfn)(const void *,const void *);
int sf(struct m *a,struct m *b)
{	return ( a->c - b->c);
}
int main()
{	int i,bun,rau,j;
	in>>n>>m;
	for(i=0;i<m;i++)
		in>>g[i].p1>>g[i].p2>>g[i].c;
	in.close();
	qsort((void*)&g,m,sizeof(struct m),(compfn)sf);
	for(i=1;i<=n;i++)
		c[i]=i;
	for(i=0;nrm<=n-1;i++)
	{	if(c[g[i].p1]!=c[g[i].p2])
		{	cm+=g[i].c;
			apm[nrm]=i;
			nrm++;
			bun=min(c[g[i].p1],c[g[i].p2]);
			rau=max(c[g[i].p1],c[g[i].p2]);
			for(j=1;j<=n;j++)
				if(c[j]==rau)c[j]=bun;
		}	
	}
	out<<cm<<'\n'<<nrm-1<<'\n';
	for(i=1;i<=nrm-1;i++)
		out<<g[apm[i]].p1<<" "<<g[apm[i]].p2<<'\n';
	out.close();
	return 0;
}