Cod sursa(job #2294785)

Utilizator vladth11Vlad Haivas vladth11 Data 2 decembrie 2018 19:57:31
Problema Arbore partial de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.35 kb
#include<fstream>
#include<algorithm>
#include<vector>
#define pb push_back

using namespace std;
ifstream cin("apm.in");
ofstream cout("apm.out");
const int maxn = 400100;
struct muchie {int e1,e2,cost;};
muchie G[maxn];
int A[maxn],c[maxn];
int n,m,costAPM;

int grupa(int i)
{
	if (c[i] == i) return i;
	c[i] = grupa(c[i]);
	return c[i];
}

void reuniune(int i,int j)
{
	c[grupa(i)] = grupa(j);
}
void initializare(){
    int i;
    cin >> n >> m;
    for(i = 1;i <= m;i++){
        cin >> G[i].e1 >> G[i].e2 >> G[i].cost;
    }
    for(i = 1;i <= n;i++)
        c[i] = i;
}
void Afisare(){
    int i;

    cout << costAPM << "\n";
    cout << n - 1<< "\n";
    for(i = 1;i < n;i++){
        cout << G[A[i]].e1 << " " << G[A[i]].e2 << "\n";
    }
}
bool cmp(muchie a,muchie b){
    return (a.cost < b.cost);
}
void SortareMuchii(){
    sort(G + 1,G + m + 1,cmp);
}
int main()
{
    int i,j,minim,maxim,NrmSEL;
    ios_base::sync_with_stdio();
    cin.tie(0);
    initializare();
    SortareMuchii();
    NrmSEL = 0;///numarul de muchii selectate
    for(i = 1;NrmSEL < n-1;i++){
        if(grupa(G[i].e1) != grupa(G[i].e2)){
            ///Nu formeaza cicluri
            A[++NrmSEL] = i;
            costAPM += G[i].cost;
            reuniune(G[i].e1,G[i].e2);

        }
    }
    Afisare();
	return 0;
}