Pagini recente » Cod sursa (job #1612925) | Cod sursa (job #205833) | Cod sursa (job #1704099) | Cod sursa (job #2009713) | Cod sursa (job #2843760)
#include <iostream>
#include <vector>
#include <queue>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("apm.in");
ofstream out("apm.out");
struct Muchie{
int x,y,w;
bool operator < (const Muchie m){
return (w<m.w);
}
};
vector<int> Noduri_comp;
vector<Muchie> L_muchii;
int uFind(int n, vector<int> &VTati){
vector<int> noduri_parcurse;
int temp = n;
while(temp!=VTati[temp]){
noduri_parcurse.push_back(temp);
temp=VTati[temp];
}
for(int e:noduri_parcurse){
VTati[e] = temp;
}
return temp;
}
void uUnion(int x, int y, vector<int> &VTati){
int tataX = uFind(x,VTati);
int tataY = uFind(y,VTati);
VTati[tataX] = tataY;
}
void citire(){
int n,m;
in>>n>>m;
Noduri_comp.resize(n+1);
for(int i=1;i<n+1;i++){
Noduri_comp[i] = i;
}
for(int i=0;i<m;i++){
int x,y,w;
in>>x>>y>>w;
Muchie m;
m.x=x;
m.y=y;
m.w=w;
L_muchii.push_back(m);
}
}
void kruskal(){
vector<Muchie> rez;
int w_total=0;
sort(L_muchii.begin(),L_muchii.end());
for(int i=0;i<L_muchii.size();i++){
if(uFind(L_muchii[i].x,Noduri_comp) != uFind(L_muchii[i].y,Noduri_comp)){
uUnion(L_muchii[i].x,L_muchii[i].y,Noduri_comp);
w_total+=L_muchii[i].w;
rez.push_back(L_muchii[i]);
}
}
out<<w_total<<'\n';
out<<rez.size()<<'\n';
for(auto e:rez){
out<<e.x<<' '<<e.y<<'\n';
}
}
int main(){
citire();
kruskal();
}