Pagini recente » Cod sursa (job #1256227) | Cod sursa (job #1275593) | Cod sursa (job #2385972) | Cod sursa (job #398447) | Cod sursa (job #2255736)
#include <bits/stdc++.h>
#define ll long long
using namespace std;
//ifstream in("tst.in");
ifstream in("apm.in");
ofstream out("apm.out");
struct edge{
int x, y, c;
};
int n, m, c, x, y, dad[200100], vf;
edge E[400100], st[200100];
bool cmp(const edge &a, const edge &b){
return a.c < b.c;
}
int find(int p){
return (p == dad[p] ? p : dad[p] = find(dad[p]));
}
void join(int x, int y){
dad[find(x)] = find(y);
}
int main(){
in >> n >> m;
for(int i = 1; i <= n; i++)
dad[i] = i;
for(int i = 1; i <= m; i++)
in >> E[i].x >> E[i].y >> E[i].c;
sort(E + 1, E + m + 1, cmp);
int ans = 0;
for(int i = 1; i <= m; i++){
x = E[i].x;
y = E[i].y;
c = E[i].c;
if(find(x) == find(y))
continue;
ans += c;
join(x, y);
st[++vf] = E[i];
}
out << ans << '\n' << n - 1;
for(int i = 1; i < n; i++)
out << '\n' << st[i].x << ' ' << st[i].y;
return 0;
}