Cod sursa(job #1866938)

Utilizator alexandruchiriacAlexandru Chiriac alexandruchiriac Data 3 februarie 2017 17:00:47
Problema Arbore partial de cost minim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("apm.in");
ofstream out("apm.out");
struct abc{
    int x,y,z;
}a[400004];
bool comp(abc p, abc q){ return p.z < q.z; }
int c[200004];
bool sol[400004];
int n,m,cost;
int grupa(int i)
{
    if(c[i]==i)return i;
    c[i]=grupa(c[i]);
    return c[i];
}

void uneste(int i,int j)
{
    c[grupa(i)]=grupa(j);
}
void kruskal()
{
    int sel=0;
    for(int i=1;i<=n;i++)c[i]=i;
    for(int i=1;i<=m && sel<n-1;i++)
        if(grupa(a[i].x)!=grupa(a[i].y))
        {
            sol[i]=true;
            cost+=a[i].z;
            uneste(a[i].x,a[i].y);
            sel++;
        }
}
int main()
{
    in>>n>>m;
    for(int i=1;i<=m;i++)in>>a[i].x>>a[i].y>>a[i].z;
    sort(a+1,a+m+1,comp);
    kruskal();
    out<<cost<<'\n'<<n-1<<'\n';
    for(int i=1;i<=m;i++)
        if(sol[i])
        out<<a[i].x<<' '<<a[i].y<<'\n';
    return 0;
}