Pagini recente » Cod sursa (job #935232) | Cod sursa (job #419931) | Cod sursa (job #1511189) | Cod sursa (job #2209768) | Cod sursa (job #2572372)
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>
#include <bits/stdc++.h>
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
const int nMAX=200005;
const int mMAX=400005;
struct Muchii{
int x;
int y;
int cost;
}V[mMAX];
pair<int,int> P[mMAX];
int n,m,TT[nMAX],RG[nMAX],mFinal=0,costFina=0;
int compara(Muchii a,Muchii b){
return a.cost<b.cost;
}
void citire(){
for(int i=1;i<=m;i++)
fin>>V[i].x>>V[i].y>>V[i].cost;
for(int i=1;i<=n;i++){TT[i]=i;RG[i]=1;}
sort(V+1,V+m+1,compara);
}
void unire(int x,int y){
if(RG[x]<RG[y])
TT[x]=y;
if(RG[x]>RG[y])
TT[y]=x;
if(RG[x]==RG[y])
TT[x]=y;
RG[y]++;
}
int Find(int nod){
while(nod!=TT[nod]){
nod=TT[nod];
}
return nod;
}
void kruskal(){
for(int i=1;i<=m;i++){
int tata_x=Find(V[i].x);
int tata_y=Find(V[i].y);
if(tata_x!=tata_y)
{ cout<<V[i].x<<" "<<V[i].y<<" "<<tata_x<<" "<<tata_y<<endl;
unire(tata_x,tata_y);
mFinal++;
P[mFinal].first=V[i].x;
P[mFinal].second=V[i].y;
costFina=V[i].cost;
}
}
}
void afisare(){
fout<<costFina<<endl;
for(int i=1;i<=mFinal;i++)
fout<<P[i].first<<" "<<P[i].second<<endl;
}
int main()
{ fin>>n>>m;
citire();
kruskal();
afisare();
return 0;
}