Cod sursa(job #3258538)

Utilizator Gerald123Ursan George Gerald123 Data 23 noiembrie 2024 01:23:16
Problema Arbore partial de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
///circular
//unordered_
#include <bits/stdc++.h>
#define MOD 1000000007
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
struct ceva
{
    int x,y,d;
} v[400000];
int i,j,n,m,t[200000],a,b,s;
bool cmp(ceva a,ceva b)
{
    return a.d<b.d;
}
queue <int> q;
int adop(int a)
{
    int b=a,x;
    while(a!=t[a])
        a=t[a];
    while(b!=t[a])
    {
        x=t[b];
        t[b]=a;
        b=x;
    }
    return t[a];
}
void up(int a,int b)
{
    int ta=adop(a);
    int tb=adop(b);
    t[ta]=tb;
}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    fin>>n>>m;
    for(i=1; i<=n; i++)
        t[i]=i;
    for(i=1; i<=m; i++)
        fin>>v[i].x>>v[i].y>>v[i].d;
    sort(v+1,v+1+m,cmp);
    for(i=1; i<=m; i++)
    {
        a=v[i].x;
        b=v[i].y;
        if(adop(a)!=adop(b))
        {
            up(a,b);
            s+=v[i].d;
            q.push(i);
        }
    }
    fout<<s<<'\n'<<q.size()<<'\n';
    while(!q.empty())
    {
        fout<<v[q.front()].y<<" "<<v[q.front()].x<<'\n';
        q.pop();
    }
    return 0;
}