Cod sursa(job #1982491)

Utilizator borzaalexAlexandru Borza borzaalex Data 18 mai 2017 22:27:58
Problema Arbore partial de cost minim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <fstream>
#include <algorithm>
#define Max 400100
using namespace std;
    ifstream fin("apm.in");
    ofstream fout("apm.out");
struct muchie {int x,y,c;} M[Max],S[Max];
int n,m,x,y,i,t[Max],sum,cnt;
bool f(muchie a, muchie b)
{
    return a.c<b.c;
}
int grupa(int a)
{
    if(a==t[a]) return a;
    t[a]=grupa(t[a]);
    return t[a];
}
void unesc(int a, int b)
{
    a=grupa(a);
    b=grupa(b);
    t[a]=b;
}
int main()
{
    fin>>n>>m;
    for(int i=1;i<=m;i++)
        fin>>M[i].x>>M[i].y>>M[i].c;
    for(int i=1;i<=n;i++) t[i]=i;
    sort(M+1,M+m+1,f);
    for(int i=1;i<=m;i++)
        if(grupa(M[i].x)!=grupa(M[i].y))
    {
        sum+=M[i].c;
        unesc(M[i].x,M[i].y);
        S[++cnt]=M[i];
    }
    fout<<sum<<'\n'<<cnt<<'\n';
    for(int i=1;i<=cnt;i++)
        fout<<S[i].x<<" "<<S[i].y<<"\n";
    return 0;
}