Cod sursa(job #380048)

Utilizator bora_marianBora marian bora_marian Data 4 ianuarie 2010 18:26:05
Problema Arbore partial de cost minim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include<fstream>
using namespace std;
#include<cstdio>
#include<algorithm>
struct muchie{
  int i,j;
  int cost;
  friend bool operator<(const muchie &a,const muchie &b)
    { return a.cost<b.cost;
	}
};
 muchie v[400004];
 int n,m,t[20002],a[200002],na=0,h[20002];
 int radacina(int x)
 {
   int y=x,tmp;
   while(t[x])
    x=t[x];
   while(t[y])
     tmp=t[y],t[y]=x,y=tmp;
	return x;
   }
 int main()
 {
   ifstream fin("apm.in");
   ofstream fout("apm.out");
   fin>>n>>m;
   for(int i=1;i<=m;i++)
       fin>>v[i].i>>v[i].j>>v[i].cost;
   sort(v+1,v+m+1);
   for(int i=1;i<=m;i++)
       fout<<v[i].i<<" "<<v[i].j<<" "<<v[i].cost<<endl;
   for(int i=1;i<=m;i++)
   {
      int ri=radacina(v[i].i),rj=radacina(v[i].j);
	  if(ri!=rj)
	     a[na++]=i,t[ri]=rj;
	//if(h[ri]<h[rj])
	  //t[ri]=rj;
	//else
	// if(h[ri]>h[rj])
	//  t[ri]=ri;
	 //else
} 
 int s=0;
 for(int i=0;i<na;i++)
  s+=v[a[i]].cost;
 fout<<s<<"\n"<<na<<endl;
 for(int i=0;i<na;i++)
   fout<<v[a[i]].i<<" "<<v[a[i]].j<<endl;
 return 0;
}