Cod sursa(job #2705149)

Utilizator StefaniaIrinaDobra Stefania-Irina StefaniaIrina Data 12 februarie 2021 00:09:23
Problema Arbore partial de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.25 kb
#include <fstream>
#define NMAX 400001
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
int n,m,i,j,rez,t[200001],r;
struct muchie
{
    int x,y,val;
}G[NMAX];
int radacina(int x)
{
    if(x==t[x])
        return x;
    return t[x]=radacina(t[x]);
}
void unire(int x,int y)
{
    t[x]=y;
}
void sortareQ(int pi, int ps)
{
    int p=G[pi].val,i=pi,j=ps;
    do
    {
       while(G[i].val<p)
            i++;
       while(G[j].val>p)
            j--;
       if(i<=j)
       {
        swap(G[i],G[j]);
        i++;
        j--;
       }
    }while(i<=j);
    if(pi<j)
        sortareQ(pi,j);
    if(ps>i)
        sortareQ(i,ps);
}
int main()
{
    fin>>n>>m;
    for(int i=1;i<=m;i++)
        fin>>G[i].x>>G[i].y>>G[i].val;
    sortareQ(1,m);
    for(int i=1;i<=n;i++)
        t[i]=i;
    for(int i=1;i<=m;i++)
    {
        if(radacina(G[i].x)!=radacina(G[i].y))
        {
            rez+=G[i].val;
            G[i].val=-10001;
            r++;
            unire(radacina(G[i].x),radacina(G[i].y));
        }
    }
    fout<<rez<<'\n'<<r<<'\n';
    for(int i=1;i<=m;i++)
        if(G[i].val==-10001)
            fout<<G[i].y<<" "<<G[i].x<<'\n';
    fin.close();
    fout.close();
    return 0;
}