Cod sursa(job #2464857)

Utilizator Iulia14iulia slanina Iulia14 Data 28 septembrie 2019 23:46:45
Problema Arbore partial de cost minim Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>
#include <algorithm>
#define Nmax 200002
using namespace std;
ifstream cin("apm.in");
ofstream cout("apm.out");

struct ura{
    int x,y,cost,used;
} e[2*Nmax];
int n,m,i,c,nr;
int t[Nmax],rank[Nmax];
bool cmp(ura a,ura b)
{
    return a.cost<b.cost;
}
int root(int k)
{
    if(t[k]==0)
        return k;
    int r=root(t[k]);
    t[k]=r;
    return r;
}
void unire(int x,int y)
{
    int rx=root(x),ry=root(y);
    if(rx!=ry)
    {
        nr++;
        e[i].used=1;
        c+=e[i].cost;
        if(rank[rx]>rank[ry])
            t[ry]=rx;
        else
        {
            t[rx]=ry;
            if(rank[rx]==rank[ry])
                rank[ry]++;
        }
    }
}
int main()
{
    cin>>n>>m;
    for (i=1;i<=m;i++)
        cin>>e[i].x>>e[i].y>>e[i].cost;
    sort(e+1,e+m+1,cmp);
    for(i=1;i<=m;i++)
        unire(e[i].x,e[i].y);
    cout<<c<<'\n'<<nr<<'\n';
    for(i=1;i<=m;i++)
        if(e[i].used==1)
            cout<<e[i].x<<" "<<e[i].y<<"\n";

    return 0;

}