Cod sursa(job #1844601)

Utilizator cyber_ghSoltan Gheorghe cyber_gh Data 10 ianuarie 2017 09:32:40
Problema Arbore partial de cost minim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <bits/stdc++.h>

using namespace std;



struct nod{
    int sur,dest,len;

};
nod a[100100];
int p[100100],n,m;

int find1(int nod){
    if (p[nod]==nod) return nod;
    else{
        int x=find1(p[nod]);
        p[nod]=x;
        return x;
    }

}

void unite(int a,int b){
    a=find1(a);
    b=find1(b);
    p[a]=b;
}

bool comp(nod a, nod b){
    return a.len<b.len;
}
int N,M;
int main()
{
    ifstream fin("arb.in");
    ofstream fout("arb.out");
    fin >>N>>M;
    for(int i=1;i<=M;i++){ fin >>a[i].sur>>a[i].dest>>a[i].len;
  //  fout <<a[i].sur<<" "<<a[i].dest<<" "<<a[i].len<<endl;
}

    sort(a+1,a+M+1,comp);
    int sum=0;
    for(int i=1;i<=M;i++) p[i]=i;
    for(int i=1;i<=M;i++){
        if (find1(a[i].sur)!=find1(a[i].dest)&&find1(a[i].dest)!=find1(a[i].sur)) {
            fout <<a[i].sur<<" "<<a[i].dest<<endl;
            unite(a[i].sur,a[i].dest);

        }

    }
    //cout <<sum;
    return 0;
}