Pagini recente » Cod sursa (job #1560226) | Cod sursa (job #1492880) | Cod sursa (job #1971557) | Cod sursa (job #1627973) | Cod sursa (job #2720391)
#include <iostream>
#include <fstream>
#include <set>
#include <vector>
#define nmx 200001
using namespace std;
set <pair<int,pair<int,int> > >muchii_ord;
vector <pair<int,int> > sol;
int n,m,t[nmx],costmin;
int main()
{
ifstream fin("apm.in");
ofstream fout("apm.out");
int i,x,y,cost,alese=0,rx,ry,aux;
fin>>n>>m;
for(i=1;i<=m;i++)
{
fin>>x>>y>>cost;
muchii_ord.insert(make_pair(cost,make_pair(x,y)));
}
while(alese<n-1)
{
cost=muchii_ord.begin()->first;
x=muchii_ord.begin()->second.first;
y=muchii_ord.begin()->second.second;
muchii_ord.erase(muchii_ord.begin());
///vrem sa vedem daca putem folosi muchia (x,y)
///deci de la x urcam catre radacina, la fel shi de la y
rx=x;while(t[rx])rx=t[rx];
ry=y;while(t[ry])ry=t[ry];
if(rx!=ry)
{
alese++;
///reunificăm arborașii
t[ry]=rx;
///facem apoi compresia - adică orice nod de pe traseul dintre x și rx
///respectiv y și rx (pt. că rx e noul tată) îl legăm direct de rx
aux=y;
while(t[y]!=rx)
{aux=y;y=t[y];t[aux]=rx;}
costmin+=cost;
sol.push_back(make_pair(x,y));
}
}
fout<<costmin<<"\n"<<n-1<<"\n";
for(auto&m:sol)
fout<<m.first<<" "<<m.second<<"\n";
return 0;
}