Cod sursa(job #2669514)

Utilizator iulianarsenoiuArsenoiu Iulian iulianarsenoiu Data 7 noiembrie 2020 10:20:22
Problema Arbore partial de cost minim Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.34 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("apm.in");
ofstream g("apm.out");
int n,m,cost,d[200005],t[200005];
bool sel[200005];
const int oo = INT_MAX;
vector<pair<int,int>> G[200005],e;
void Prim_Patratic()
{
    for(int i=1; i<=n; i++)
    {
        d[i]=oo;
    }
    d[1]=0;
    bool done=false;
    int nod=0;
    while(!done)
    {
        done=true;
        int Min=oo;
        for(int i=1; i<=n; i++)
        {
            if(!sel[i] && d[i]<Min)
            {
                Min=d[i];
                nod=i;
                done=false;
            }
        }
        if(done)
        {
            break;
        }
        sel[nod]=true;
        if(nod!=1)
        {
            e.push_back({t[nod],nod});
        }
        cost+=d[nod];
        for(auto it : G[nod])
        {
            if(!sel[it.first] && it.second<d[it.first])
            {
                d[it.first]=it.second;
                t[it.first]=nod;
            }
        }
    }
}
int main()
{
    f>>n>>m;
    for(int i=1; i<=m; i++)
    {
        int x,y,c;
        f>>x>>y>>c;
        G[x].push_back({y,c});
        G[y].push_back({x,c});
    }
    Prim_Patratic();
    g<<cost<<'\n';
    g<<e.size()<<'\n';
    for(auto it : e)
    {
        g<<it.first<<' '<<it.second<<'\n';
    }
    return 0;
}