Pagini recente » Cod sursa (job #1709708) | Cod sursa (job #3164038) | Cod sursa (job #891435) | Cod sursa (job #671691) | Cod sursa (job #1837524)
///alg kruskal
#include<fstream>
#include<algorithm>
using namespace std;
const int dim=200001;
struct elem{int x,y;float c;};
elem v[2*dim];
int h[dim],n,m,nr,q[dim],t[dim];
float cost;
ifstream in("apm.in");
ofstream out("apm.out");
void citire(){in>>n>>m;int i;
for(i=1;i<=m;i++)in>>v[i].x>>v[i].y>>v[i].c;
in.close();}
void init(){int i;
for(i=1;i<=n;i++)h[i]=1;}
int gasit(int x){
while(t[x])x=t[x];
return x;}
void unire(int x,int y){
if(h[x]>h[y])t[y]=x;
else {t[x]=y;
if(h[x]==h[y])h[y]++;}}
void rez(){int i=1,x,y,t1,t2;nr=0;
while(nr<n-1){
x=v[i].x;y=v[i].y;
t1=gasit(x);
t2=gasit(y);
if(t1!=t2){
cost+=v[i].c;
q[++nr]=i;
unire(t1,t2);
}++i;
}}
bool cmp(elem a,elem b){
return a.c<b.c;
}
int main(){int i;
citire();
sort(v+1,v+m+1,cmp);
init();
rez();
out<<cost<<"\n";
out<<n-1<<"\n";
for(i=1;i<=n-1;i++)
out<<v[q[i]].x<<" "<<v[q[i]].y<<"\n";
out.close();
return 0;}