Cod sursa(job #1773310)

Utilizator alex.craciunCraciun Alexandru alex.craciun Data 7 octombrie 2016 18:48:17
Problema Arbore partial de cost minim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.49 kb
#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
FILE *f=fopen("apm.in","r");
vector <pair <int,int> > lv[200010],vf;
vector <int> v;
priority_queue <pair<int,pair<int,int> > > q;
int n,m,a,b,c;
void citire( )
{
    fscanf(f,"%d%d",&n,&m);
    for(int i=1;i<=m;i++)
    {
        fscanf(f,"%d%d%d",&a,&b,&c);
        lv[a].push_back(make_pair(b,c));
        lv[b].push_back(make_pair(a,c));
    }

}
int used[200010],co,t,nc,nrf;

void rez( )
{
    used[1]=1;
    vector < pair <int,int> > ::iterator ii;
    for(ii=lv[1].begin();ii!=lv[1].end();ii++)
       {
           q.push(make_pair(-(ii->second),make_pair(1,ii->first)));

       }
   int nr=1;
   while(nr<n)
   {
       co=-q.top().first;
       t=q.top().second.first;
       nc=q.top().second.second;
       q.pop();
       if(used[nc])
         continue;
       nrf+=co;
       nr++;
       used[nc]=1;
       vf.push_back(make_pair(t,nc));
         vector < pair <int,int> > ::iterator ii;
       for(ii=lv[nc].begin();ii!=lv[nc].end();ii++)
           if(!used[ii->first])
             q.push(make_pair(-(ii->second),make_pair(nc,ii->first)));

   }
}

FILE *f1=fopen("apm.out","w");
void afish( )
{
    fprintf(f1,"%d\n%d\n",nrf,vf.size());

   vector < pair <int,int> > ::iterator ii;
  for(ii=vf.begin();ii!=vf.end();ii++)
     fprintf(f1,"%d %d\n",ii->second,ii->first);


}

int main()
{
    citire( );
    rez();
    afish();
    return 0;
}