Cod sursa(job #756001)

Utilizator ion824Ion Ureche ion824 Data 8 iunie 2012 17:25:40
Problema Arbore partial de cost minim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include<fstream>
#include<algorithm>
#define nmax 400002
using namespace std;
int n,m;
int X[nmax],Y[nmax],C[nmax],GR[nmax],IND[nmax],a[nmax],r[nmax];
int rs[nmax],niv;
bool cmp(int i,int j){ return (C[i]<C[j]); }

int grupa(int i)
{
 if(GR[i]==i)return i;
 GR[i]=grupa(GR[i]);
 return GR[i];   
}
     
void join(int i,int j)
{
 GR[grupa(i)]=grupa(j);     
} 

int main(void){
    ifstream fin("apm.in");
    ofstream fout("apm.out");
    int i,j,costm=0;
    fin>>n>>m;
    for(i=1;i<=m;++i)
    {
     fin>>X[i]>>Y[i]>>C[i];
     IND[i]=i;                 
    }
    for(i=1;i<=n;++i)GR[i]=i;
    sort(IND+1,IND+m+1,cmp);
    for(i=1;i<=m;++i)
    {
      if(grupa(X[IND[i]])!=grupa(Y[IND[i]]))
      {
       costm+=C[IND[i]]; 
       join(X[IND[i]],Y[IND[i]]);
       rs[++niv]=IND[i];                                    
      }                                    
    }
    fout<<costm<<'\n'<<niv<<'\n';
    for(i=1;i<=niv;++i)
     fout<<X[rs[i]]<<' '<<Y[rs[i]]<<'\n';
 return 0;   
}