Pagini recente » Cod sursa (job #690113) | Cod sursa (job #2862223) | Cod sursa (job #1920675) | Cod sursa (job #2141599) | Cod sursa (job #3164377)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
int h[100],tata[100];
vector<vector<int>> adiacenta;
void init(int x){
h[x]=0;
tata[x]=h[x];
}
int reprez(int x){
while(tata[x] != 0)
x=tata[x];
return x;
}
void reuneste(int x, int y){
int rx = reprez(x);
int ry = reprez(y);
if(h[rx]>h[ry])
tata[ry]=rx;
else {
tata[rx]=ry;
if(h[rx]==h[ry])
h[ry]=h[ry]+1;
}
}
void kruskal(vector<vector<int>> ad,vector<vector<int>> &muchie){
int cost_final=0, muchii = 0;
sort(ad.begin(), ad.end());
for(auto &m:ad){
int c = m[0];
int x= m[1];
int y= m[2];
if(reprez(x)!= reprez(y)){
reuneste(x,y);
muchii++;
muchie.push_back({x,y});
cost_final+=c;
}
}
fout<< cost_final<<endl<<muchii<<endl;
}
int main()
{
int n, m, x,y,c;
fin>>n>>m;
//adiacenta.resize(n+1);
//cost.resize(n+1);
for(int i=0; i<m; i++){
fin>>x>>y>>c;
adiacenta.push_back({c,x,y});
}
vector<vector<int>> raspuns;
kruskal(adiacenta, raspuns);
for(auto &i:raspuns){
fout<<i[0]<<' '<<i[1]<<endl;
}
return 0;
}