Cod sursa(job #2494954)

Utilizator tavi255Varzaru Octavian Stefan tavi255 Data 18 noiembrie 2019 18:26:40
Problema Arbore partial de cost minim Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
//#include <iostream>
#include <bits/stdc++.h>
using namespace std;
ifstream in("apm.in");
ofstream out("apm.out");
const int Max=200005;
int dist[Max],viz[Max],n,m,cst,tata[Max],sum,nr;
struct compara
{
    bool operator()(int x,int y)
     {
         return dist[x]>dist[y];
     }
};
struct muc
{
   int x,y;
}muc[Max];
priority_queue <int,vector <int>,compara >q;
vector <pair <int,int> >v[Max];
void citire()
{
   in>>n>>m;
   for(int i=1;i<=m;i++)
   {
       int x,y,c; in>>x>>y>>c;
       v[x].push_back({y,c});
       v[y].push_back({x,c});
   }
}

int main()
{
    citire();
   viz[1]=1;
   for(int i=2;i<=n;i++)
    dist[i]=INT_MAX;
   q.push(1);
   while(!q.empty())
   {
       int nod=q.top(); q.pop(); viz[nod]=1;
       for(int j=0;j<v[nod].size();j++)
       {
           int vecin=v[nod][j].first; int cost=v[nod][j].second;
           if(viz[vecin]==0 && dist[vecin]>cost )
           {
                dist[vecin]=cost; tata[vecin]=nod;
               q.push(vecin);
           }
       }
   }

   for(int i=1;i<=n;i++)
    sum=sum+dist[i];
    out<<sum<<"\n";
    out<<n-1<<"\n";
    for(int i=2;i<=n;i++)
        out<<tata[i]<<" "<<i<<"\n";
    return 0;
}