Cod sursa(job #3192502)

Utilizator arianagolteanAriana Oltean arianagoltean Data 12 ianuarie 2024 18:50:25
Problema Arbore partial de cost minim Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.34 kb
#include <fstream>
#include <algorithm>
#include <vector>

using namespace std;
ifstream cin ("apm.in");
ofstream cout ("apm.out");
int n,m,nr,sum;
int parinti[10005];
struct muchie
{
    int noda,nodb,val;
}a[10005];
vector <muchie> muchii;
bool compara(muchie a, muchie b)
{
    return a.val<b.val;
}
void Union(int a,int b)
{
    parinti[a]=b;
}
int Find(int nod)
{
    int copie_nod=nod;
    while (parinti[nod])nod=parinti[nod];
    while (parinti[copie_nod])
    {
        int aux=copie_nod;
        copie_nod=parinti[copie_nod];
        parinti[aux]=nod;
    }
    return nod;
}
int main()
{
    cin >> n >> m;
    for (int i=1;i<=m;i++)
    {
        int x,y,val;
        cin >> x >> y >> val;
        a[i].noda=x;
        a[i].nodb=y;
        a[i].val=val;
    }
    sort(a+1,a+m+1,compara);
    for (int i=1;i<=m;i++)
    {
        int x=a[i].noda;
        int y=a[i].nodb;
        int parinte1=Find(x);
        int parinte2=Find(y);
        if (parinte1!=parinte2)
        {
            nr++;
            Union(parinte1,parinte2);
            sum+=a[i].val;
            muchii.push_back(a[i]);
        }
        if (nr==n-1) break;
    }
    cout << sum << '\n' << n-1 << '\n';
    for (int i=0;i<nr;i++)
    {
        cout << muchii[i].noda << " " << muchii[i].nodb << '\n';
    }
    return 0;
}