Cod sursa(job #3302084)

Utilizator Tudor_CCTudor Cocu Tudor_CC Data 2 iulie 2025 20:23:49
Problema Arbore partial de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.46 kb
#include <bits/stdc++.h>

using namespace std;

struct el
{
    int x,y;
};
el s[400055];

vector <int> v[200055];

vector <int> p[200055];

priority_queue <pair<int,pair<int,int>>,vector<pair<int,pair<int,int>>>,greater<pair<int,pair<int,int>>>> q;

int f[200055];

int main()
{
    ifstream cin("apm.in");
    ofstream cout("apm.out");
    int n,m,x,y,c;
    cin>>n>>m;
    for(int i=1;i<=m;++i)
    {
        cin>>x>>y>>c;
        v[x].push_back(y);
        p[x].push_back(c);
        v[y].push_back(x);
        p[y].push_back(c);
    }
    f[1]=1;
    for(int i=0;i<v[1].size();++i)
    {
        q.push(make_pair(p[1][i],make_pair(1,v[1][i])));
    }
    int sum=0,in=0;
    while(q.size())
    {
        auto top=q.top();
        q.pop();
        int pr,xx,yy;
        pr=top.first;
        xx=top.second.first;
        yy=top.second.second;
        if(f[yy]==0)
        {
            f[yy]=1;
            sum+=pr;
            ++in;
            s[in].x=xx;
            s[in].y=yy;
            if(in==n-1)
            {
                break;
            }
            for(int i=0;i<v[yy].size();++i)
            {
                if(f[v[yy][i]]==0)
                {
                    q.push(make_pair(p[yy][i],make_pair(yy,v[yy][i])));
                }
            }
        }
    }
    cout<<sum<<"\n"<<in<<"\n";
    for(int i=1;i<=in;++i)
    {
        cout<<s[i].x<<" "<<s[i].y<<"\n";
    }
    return 0;
}