Cod sursa(job #2131039)

Utilizator mateiuMateiu Ioan mateiu Data 14 februarie 2018 11:21:13
Problema Arbore partial de cost minim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <fstream>
#include <algorithm>
using namespace std;
struct el{
    int xl,yl,cost;
    bool es;
}v[400002];
int n,m;
int t[200002];
bool cp(el m1,el m2)
{
    return m1.cost<m2.cost;
}
int ver(int x)
{
  if(t[x]==x)
    return x;
  t[x]=ver(t[x]);
  return t[x];
}

ifstream f("apm.in");
ofstream g("apm.out");
void reuneste(int m3,int m4)
{
    t[ver(m3)]=ver(m4);
}
int tot=0,co=0;
int main()
{
    f>>n>>m;
    for(int i=1;i<=m;i++)
    {
        f>>v[i].xl>>v[i].yl>>v[i].cost;
        v[i].es=true;
    }
    sort(v+1,v+m+1,cp);
    for(int i=1;i<=n;i++)
        t[i]=i;
    for(int i=1;i<=m;i++)
    {
        if(ver(v[i].xl)==ver(v[i].yl))
            v[i].es=false;
        else
        {
            reuneste(v[i].xl,v[i].yl);
            tot=tot+v[i].cost;
            co++;
        }

    }
    g<<tot<<"\n";
    g<<co<<"\n";
    for(int i=1;i<=m;i++)
    {
        if(v[i].es)
        {
            g<<v[i].xl<<" "<<v[i].yl<<"\n";
        }
    }
    return 0;
}