Pagini recente » Istoria paginii runda/idkboss | Cod sursa (job #2077451) | Cod sursa (job #1121432) | Cod sursa (job #3156653) | Cod sursa (job #1699656)
#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;
}