Pagini recente » Cod sursa (job #499343) | Cod sursa (job #874560) | Cod sursa (job #738827) | Cod sursa (job #1496264) | Cod sursa (job #3216115)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
struct muchie{
int i; int j; int cost;
}v[400001];
bool cmp(muchie a,muchie b){
return a.cost<b.cost;
}
int n,m,tata[200001];
int suma = 0 ;
vector<int>rez;
int root(int x){
while(tata[x]>0)
x=tata[x];
return x;
}
void unite(int x,int y){
if(tata[x]>tata[y])
swap(x,y);
tata[x]+=tata[y];
tata[y]=x;
}
int main(){
fin>>n>>m;
for(int i=1;i<=m;i++)
fin>>v[i].i>>v[i].j>>v[i].cost;
sort(v+1,v+m+1,cmp);
for(int i=1;i<=n;i++)
tata[i]=-1;
int cnt = 0;
for(int i=1;i<=m && rez.size()<n-1;i++){
int x = v[i].i;
int y = v[i].j;
int cost = v[i].cost;
x = root(x);
y = root(y);
if(x!=y){
rez.push_back(i);
suma+=cost;
unite(x,y);
}
}
fout<<suma<<'\n';
fout<<n-1<<'\n';
for(auto x : rez){
fout<<v[x].i<<" "<<v[x].j<<'\n';
}
return 0;
}