Cod sursa(job #2750885)

Utilizator BogdanFarcasBogdan Farcas BogdanFarcas Data 13 mai 2021 15:19:17
Problema Arbore partial de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>
#include <queue>
#include <bitset>

using namespace std;

ifstream cin("apm.in");
ofstream cout("apm.out");

const int N=2e5+5;
const int INF=1e9;

vector< pair<int,int> >a[N];
priority_queue< pair<int,int> >pq;

int n,m,x,y,cost;
int d[N],pred[N];
bitset<N>selectat;

void Prim()
{
    for(int i=2;i<=n;i++)
    {
        d[i]=INF;
    }
    pq.push({0,1});
    while(!pq.empty())
    {
        int x=pq.top().second;
        pq.pop();
        if(selectat[x])
        {
            continue;
        }
        cost+=d[x];
        selectat[x]=true;
        for(auto p:a[x])
        {
            int y=p.first;
            int c=p.second;
            if(!selectat[y] && c<d[y])
            {
                d[y]=c;
                pred[y]=x;
                pq.push({-c,y});
            }
        }
    }
}

int main()
{
    cin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        cin>>x>>y>>cost;
        a[x].push_back({y,cost});
        a[y].push_back({x,cost});
    }
    cost=0;
    Prim();
    cout<<cost<<"\n"<<n-1<<"\n";
    for(int i=2;i<=n;i++)
    {
        cout<<i<<" "<<pred[i]<<"\n";
    }
    return 0;
}