Cod sursa(job #2500788)

Utilizator baltoi.teodorTeodor Baltoi baltoi.teodor Data 28 noiembrie 2019 18:01:41
Problema Arbore partial de cost minim Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <bits/stdc++.h>
#define NMAX 200005
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
int cmin[NMAX];
vector < pair <int, int > >sol;
int prec[NMAX];
bool sel[NMAX]; //cele selectate marcate cu 1
vector <pair<int,int > >v[NMAX];
int N,M;
int main()
{
    int x,y,c;
    fin>>N>>M;
    for(int i=1;i<=M;++i)
    {
        fin>>x>>y>>c;
        v[x].push_back({y,c});
        v[y].push_back({x,c});
    }
    int min1,i,j,S=0,poz;
    sel[1]=1;
    int start = 1;
    for(i=2;i<=N;++i)
        cmin[i]=INT_MAX/2;
    for(auto vecin:v[1])
        cmin[vecin.first]=vecin.second, prec[vecin.first] = start;
    prec[start]=0;
    cmin[start]=0;
    for(i=1;i<=N-1;++i)
    {
        min1= INT_MAX/2;
        for(j=1;j<=N;++j)
            if(cmin[j]<min1 && !sel[j]) {min1=cmin[j], poz=j;}
        sel[poz]=1;
        S+=min1;
        for(auto vecin:v[poz])
        if(cmin[vecin.first] > vecin.second && !sel[vecin.first]) {
            cmin[vecin.first]=vecin.second;
            prec[vecin.first]=poz;
        }
    }
    fout<<S<<"\n";
    fout<<N-1<<"\n";
    for(int i=2;i<=N;++i)
        {
        fout<<i<< " "<<prec[i]<<"\n";
        }
    return 0;
}