Cod sursa(job #1713976)

Utilizator cubaLuceafarul cuba Data 7 iunie 2016 00:21:24
Problema Arbore partial de cost minim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("apm.in");
ofstream g("apm.out");
const int NMAX=200003;
const int MMAX=400003;
struct Pct{
    int x,y,cost;
};
int Tata[NMAX],n,m;
Pct sol[NMAX],graf[MMAX];
inline bool cmp(const Pct A, const Pct B){
    return A.cost<B.cost;
}
inline int Find(int x)
{
    if(Tata[x]!=x)
        Tata[x]=Find(Tata[x]);
    return Tata[x];
}
inline void Union(int x,int y)
{
    Tata[x]=y;
}
int main()
{
    int cost=0,cnt=0;
    f>>n>>m;
    for(int i=1;i<=m;i++)
        f>>graf[i].x>>graf[i].y>>graf[i].cost;
    sort(graf+1,graf+m+1,cmp);
    for(int i=1;i<=n;i++)
        Tata[i]=i;
    for(int i=1;i<=m;i++)
    {
        if(cnt==n)
            break;
        if(Tata[Find(graf[i].x)]!=Tata[Find(graf[i].y)])
        {
            cnt++;
            cost+=graf[i].cost;
            sol[cnt]=graf[i];
            Union(Find(graf[i].x),Find(graf[i].y));
        }
    }
    g<<cost<<"\n"<<cnt<<"\n";
    for(int i=1;i<=cnt;i++)
        g<<sol[i].x<<" "<<sol[i].y<<"\n";
    return 0;
}