Cod sursa(job #1468497)

Utilizator ionut98Bejenariu Ionut Daniel ionut98 Data 6 august 2015 11:00:49
Problema Arbore partial de cost minim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include<fstream>
#include<algorithm>
using namespace std;
ifstream f("apm.in");
ofstream g("apm.out");
struct pie
{
    int x,y,c;
};
pie a[200001];
int i,j,k,m,n,u;
int fat[200001],rg[200001],d[200001];
bool cmp(pie o1,pie o2)
{
    return o1.c<o2.c;
}
void add(int x,int y)
{
    if(rg[x]>rg[y])
      fat[y]=x;
    else
      fat[x]=y;
    if(rg[x]==rg[y])
      ++rg[y];
}
int rad(int x)
{
    while (x!=fat[x])
      x=fat[x];
    return x;
}
int main()
{
    f>>n>>m;
    for(i=1;i<=n;++i)
    {
        fat[i]=i;
        rg[i]=1;
    }
    for(i=1;i<=m;++i)
     f>>a[i].x>>a[i].y>>a[i].c;
    int s=0;
    sort(a+1,a+m+1,cmp);
    for(i=1;i<=m;++i)
    {
        int x=rad(a[i].x);
        int y=rad(a[i].y);
        if(x!=y)
        {
            d[++k]=i;
            s+=a[i].c;
            add(x,y);
        }
    }
    g<<s<<"\n";
    g<<k<<"\n";
    for(i=1;i<=k;++i)
      g<<a[d[i]].x<<" "<<a[d[i]].y<<"\n";
    return 0;
}