Cod sursa(job #1088926)

Utilizator span7aRazvan span7a Data 20 ianuarie 2014 23:13:28
Problema Arbore partial de cost minim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
#include<fstream>
#include<stdlib.h>
#include<stdio.h>
#include<algorithm>
using namespace std;
ifstream f("amp.in");
ofstream g("apm.out");
int n,m,k,nr=0,cc[400001];
struct muchii
{
    int e1,e2,cost,conex;
};
muchii v[400001];
bool cmp(muchii a,muchii b)
{
    return a.cost<b.cost;
}
int main()
{   int i,x,y,val,c=0;
    f>>n>>m;
    for(i=1;i<=m;i++)
      { 
		  f>>v[i].e1>>v[i].e2>>v[i].cost;
		  for(int j=1;j<i;j++)
			  if(v[j].e1==v[i].e1&&v[j].e2==v[i].e2)
				  if(v[i].cost>v[j].cost)
				 { i--;m--;}
				  else
					  {v[j].cost=v[i].cost;i--;m--;}
		
		  
	  }
      sort(v+1,v+m+1,cmp);
      for(i=1;i<=n;i++)cc[i]=i;
    for(k=1;k<=m;k++)
    {
        x=v[k].e1;
        y=v[k].e2;
        if(cc[x]!=cc[y])
        {
            c+=v[k].cost;nr++;
           // g<<x<<" "<<y<<'\n';
            v[k].conex=1;
            val=cc[y];//v[k].conex=cc[x];
            for(i=1;i<=n;i++)
                if(cc[i]==val)cc[i]=cc[x];
           /* for(i=1;i<=m;i++)
                if(v[i].conex==val)v[i].conex=cc[x];*/
 
        }
        //else v[k].conex=0;
 
    }
 
    g<<c<<'\n';
    g<<nr<<'\n';
    //g<<c<<'\n';
  for(i=1;i<=m;i++)
       {
           if(v[i].conex)g<<v[i].e1<<" "<<v[i].e2<<'\n';
       }
    return 0;
}