Cod sursa(job #2354293)

Utilizator vladcoroian2001Vlad Coroian vladcoroian2001 Data 25 februarie 2019 09:38:32
Problema Arbore partial de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <fstream>
#include <queue>
#include <vector>

using namespace std;
ifstream fi("apm.in");
ofstream fo("apm.out");
const int NMAX=2e5+5,INF=1e9;
int n,m,x,y,c,sum,key[NMAX],p[NMAX],viz[NMAX];
vector <pair<int,int>> V[NMAX];
priority_queue <pair<int,int>> Q;
int main()
{
    fi>>n>>m;
    for(int i=1;i<=m;i++)
    {
        fi>>x>>y>>c;
        V[x].push_back({y,c});
        V[y].push_back({x,c});
    }
    key[1]=0;
    p[1]=0;
    for(int i=2;i<=n;i++)
    {
        key[i]=INF;
        p[i]=0;
    }
    for(int i=1;i<=n;i++)
        Q.push({-key[i],i});
    while(!Q.empty())
    {
        x=Q.top().second;
        Q.pop();
        if(viz[x]) continue;
        viz[x]=1;
        for(auto edge:V[x])
        {
            y=edge.first;
            c=edge.second;
            if(!viz[y] && key[y]>c)
            {
                key[y]=c;
                p[y]=x;
                Q.push({-c,y});
            }
        }
    }
    for(int i=1;i<=n;i++)
        sum+=key[i];
    fo<<sum<<"\n"<<n-1<<"\n";
    for(int i=2;i<=n;i++)
        fo<<p[i]<<" "<<i<<"\n";
    fi.close();
    fo.close();
    return 0;
}