Cod sursa(job #1458732)

Utilizator TibixbAndrei Tiberiu Tibixb Data 8 iulie 2015 12:53:33
Problema Arbore partial de cost minim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include<fstream>
#include<algorithm>
using namespace std;
int t[200003], n, m, i, soll, ra, rb, nrsol;
struct x3{
    int cost;
    int a;
    int b;
};
pair <int, int> sol[200003];
x3 x[400003];
int cmp(x3 x, x3 y){
    return x.cost<y.cost;
}
int rad(int x){
    while(t[x]>0)
        x=t[x];
    return x;
}
ifstream in("apm.in");
ofstream out("apm.out");
int main(){
    in>>n>>m;
    for(i=1; i<=m; i++)
        in>>x[i].a>>x[i].b>>x[i].cost;
    sort(x+1, x+m+1, cmp);
    for(i=1; i<=n; i++)
        t[i]=-1;
    for(i=1; i<=m; i++){
        ra=rad(x[i].a);
        rb=rad(x[i].b);
        if (ra == rb)
            continue;
        soll+=x[i].cost;
        sol[++nrsol].first=x[i].a;
        sol[nrsol].second=x[i].b;
        if(t[ra]<t[rb]){
            t[ra]+=t[rb];
            t[rb]=ra;
        }else{
            t[rb]+=t[ra];
            t[ra]=rb;
        }
    }
    out<<soll<<"\n";
    out<<nrsol<<"\n";
    for(i=1; i<=nrsol; i++)
        out<<sol[i].first<<" "<<sol[i].second<<"\n";
return 0;
}