Cod sursa(job #2425351)

Utilizator stefzahZaharia Stefan Tudor stefzah Data 24 mai 2019 18:58:32
Problema Arbore partial de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.39 kb
#include <fstream>
#include <vector>
#include <queue>
#include <iostream>
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
vector<pair<int,int> >v[200005];
pair<int,pair<int,int> >q;
struct muchie{int x,y,d;}s[200005];
priority_queue<pair<int,pair<int,int> > > C;
bool viz[200005];
int main()
{int N,M,i,x,y,d,sol=0,ct=0;
 //pair<int,int>c;
 int c;
 fin>>N>>M;
 for(i=1;i<=M;i++)
    {fin>>x>>y>>d;
     v[x].push_back(make_pair(-d,y));
     v[y].push_back(make_pair(-d,x));
    }
 for(i=0;i<v[1].size();i++)
    {C.push(make_pair(v[1][i].first,make_pair(1,v[1][i].second)));
    }
 viz[1]=1;

 while(!C.empty())
 {//c=C.front;
  while(!C.empty()&&viz[C.top().second.second]==1)
       {C.pop();
       }
  if(!C.empty()) {c=C.top().second.second;
                  sol+=-C.top().first;
                  //cout<<C.top().first<<"\n";
                  ct++;
                  s[ct].x=C.top().second.first;
                  s[ct].y=C.top().second.second;
                  //s[ct].d=C.top().first;
                  viz[c]=1;
                 }
                 //cout<<"ahhh";
  if(!C.empty())C.pop();
  //viz[c.second]=1;
  for(i=0;i<v[c].size();i++)
     if(viz[v[c][i].second]==0){C.push(make_pair(v[c][i].first,make_pair(c,v[c][i].second)));}
 }
 fout<<sol<<"\n";
 fout<<N-1<<"\n";
 for(i=1;i<=N-1;i++)
    fout<<s[i].x<<" "<<s[i].y<<"\n";
}