Cod sursa(job #1699656)

Utilizator mihaelatd96Tudor Mihaela Daniela mihaelatd96 Data 8 mai 2016 09:45:03
Problema Arbore partial de cost minim Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.35 kb
#include<iostream>
#include<fstream>
#include<queue>
#include<vector>
#include<utility>
#include<stack>
using namespace std;
ifstream f("apm.in");
ofstream g("apm.out");

struct graf
{
int v1,v2,cost;
};
vector <graf> G;
int n,m;
vector <int> L;
vector < pair <int,int> > arbore;

void init()
{L.resize(n);
    for(int i=0;i<n;i++)
        {L[i]=i;}
}

void sortare()
{int i,j;
graf aux;
 for(i=0;i<m;i++)
    for(j=i+1;j<m;j++)
      if(G[i].cost>G[j].cost)
        {
            aux=G[i];
            G[i]=G[j];
            G[j]=aux;
        }
}


int main()
{int v_1,v_2,c;
  f>>n>>m;
  for(int i=0;i<m;i++)
  {
      graf cop;
      f>>v_1>>v_2>>c;
      cop.v1=v_1-1;
      cop.v2=v_2-1;
      cop.cost=c;
      G.push_back(cop);
  }

int i=0,j,k=0,x,y,ct=0;
sortare();
init();
int numar_muchii=0;
    while(k<n-1)
    {
        if(L[G[i].v1]!=L[G[i].v2])
        {
            k++;
            ct=ct+G[i].cost;
            numar_muchii++;
            arbore.push_back(make_pair((G[i].v1+1),(G[i].v2+1)));
            x=L[G[i].v1];
            y=L[G[i].v2];
            for(j=0;j<n;j++)
                if(L[j]==x)
                 L[j]=y;}
      i++;  }
    g<<ct<<"\n"<<numar_muchii<<"\n";

for(unsigned int i=0;i<arbore.size();i++)
g<<arbore[i].first<<" "<<arbore[i].second<<"\n";

    return 0;
}