Pagini recente » Cod sursa (job #698464) | Cod sursa (job #1025451) | Cod sursa (job #780913) | Cod sursa (job #481430) | Cod sursa (job #903112)
Cod sursa(job #903112)
#include <fstream>
#include <algorithm>
#define nmax 200100
#define mmax 400100
using namespace std;
struct edge{int x,y,cost,k;}Edge[mmax];
int N,M,Answer,Apm[nmax],T[nmax];
int Dfs(int Nod) {
if(T[Nod]!=Nod)
return (T[Nod]=Dfs(T[Nod]));
return Nod;
}
bool compare(edge A,edge B) {
return A.cost<B.cost;
}
void solve() {
int i,A,B,Nr;
sort(Edge+1,Edge+M+1,compare);
for(i=1;i<=N;i++)
T[i]=i;
for(i=1,Nr=0;i<=M;i++) {
A=Dfs(Edge[i].x);
B=Dfs(Edge[i].y);
if(A!=B) {
Answer+=Edge[i].cost;
Apm[++Nr]=i;
T[A]=B;
}
}
}
void read() {
int i;
ifstream in("apm.in");
in>>N>>M;
for(i=1;i<=M;i++) {
in>>Edge[i].x>>Edge[i].y>>Edge[i].cost;
Edge[i].k=i;
}
in.close();
}
void write() {
ofstream out("apm.out");
out<<Answer<<'\n'<<(N-1)<<'\n';
for(int i=1;i<N;i++)
out<<Edge[Apm[i]].x<<' '<<Edge[Apm[i]].y<<'\n';
out.close();
}
int main() {
read();
solve();
write();
return 0;
}