Cod sursa(job #2703065)

Utilizator Costea_AlexandruCostea Alexandru Costea_Alexandru Data 6 februarie 2021 23:21:58
Problema Arbore partial de cost minim Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <fstream>
using namespace std;
ifstream fi("apm.in");
ofstream fo("apm.out");
int n,m,i,j,rez,t[200001],r;
struct muchie{int x,y,c;}v[400001];
int Radacina(int x)
{
    if(x == t[x])
        return x;
    return t[x] = Radacina(t[x]);
}
void Unire(int x, int y)
{
    t[x] = t[y];
}
int main()
{
    fi >> n >> m;
    for(i=1; i<=m; i++)
        fi >> v[i].x >> v[i].y >> v[i].c;
    for(i=1; i<m; i++)
        for(j=i; j<=m; j++)
           if(v[i].c > v[j].c)
              swap(v[i],v[j]);
    for(i=1; i<=n; i++)
        t[i] = i;
    for(i=1; i<=m; i++)
    {
        if(Radacina(v[i].x) != Radacina(v[i].y))
        {
            rez += v[i].c;
            v[i].c = -1;
            r++;
            Unire(Radacina(v[i].x),Radacina(v[i].y));
        }
    }
    fo << rez << '\n' << r << '\n';
    for(i=1; i<=m; i++)
        if(v[i].c == -1)
          fo << v[i].x << " " << v[i].y << '\n';
    return 0;
}