Pagini recente » Cod sursa (job #1649223) | Cod sursa (job #2409939) | Cod sursa (job #2298548) | Cod sursa (job #2681146) | Cod sursa (job #2205061)
#include <bits/stdc++.h>
using namespace std;
struct arc{
int x,y,cost;
bool operator<(arc a){
if(cost<a.cost)return true;
return false;
}
};
istream& operator>>(istream& in,arc& a){
in>>a.x>>a.y>>a.cost;
return in;
}
ostream& operator<<(ostream& out,arc& a){
out<<a.x<<' '<<a.y<<' '<<a.cost<<'\n';
return out;
}
int tata_suprem(int a,vector<int>& padure){
if(a==padure[a]){
return a;
}
padure[a]=tata_suprem(padure[a],padure);
return padure[a];
}
void reuniune(int a,int b, vector<int>& padure,vector<int>& rang){
a=tata_suprem(a,padure);
b=tata_suprem(b,padure);
if(rang[a]>rang[b]){
padure[b]=a;
}
else if(rang[b]>rang[a]){
padure[a]=b;
}
else{
padure[b]=a;
rang[a]++;
}
}
bool aceeasi_comp(int a,int b, vector<int>& padure){
if(tata_suprem(a,padure)==tata_suprem(b,padure))return true;
return false;
}
int main()
{
ifstream in("apm.in");
ofstream out("apm.out");
int cost_total=0;
int nr_noduri,nr_arce;
in>>nr_noduri;
vector<int> paduri;
vector<int> rang;
for(int i=0;i<=nr_noduri;i++){
paduri.push_back(i);
rang.push_back(0);
}
in>>nr_arce;
vector<arc> arce;
for(int i=0;i<nr_arce;i++){
arc aux;
in>>aux;
arce.push_back(aux);
}
sort(arce.begin(),arce.end());
vector<arc> apcm;
for(int i=0;i<nr_arce;i++){
arc aux=arce[i];
if(!aceeasi_comp(aux.x,aux.y,paduri)){
cost_total+=aux.cost;
reuniune(aux.x,aux.y,paduri,rang);
apcm.push_back(aux);
}
}
out<<cost_total<<'\n'<<apcm.size()<<'\n';
for(int i=0;i<apcm.size();i++){
out<<apcm[i].x<<" "<<apcm[i].y<<'\n';
}
return 0;
}