Pagini recente » Cod sursa (job #1625446) | Cod sursa (job #848442) | Cod sursa (job #1998987) | Cod sursa (job #2435616) | Cod sursa (job #2236468)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
const int NMAX=200000;
const int MMAX=400000;
struct Muchie
{
int u,v,cost,sel;
};
int n,m,i,j,k,total,ma,x3,y3;
Muchie vv[NMAX+5];
int t[NMAX+5],h[NMAX+5];
bool cmp(Muchie a,Muchie b)
{
return a.cost<b.cost;
}
int FindSet(int x)
{
while(t[x]!=x)
x=t[x];
return x;
}
void UnionSet(int x,int y)
{
if(h[x]==h[y])
{
h[x]++;
t[y]=x;
}
else
if(h[x]<h[y])
{
t[x]=y;
}
else
t[y]=x;
}
int main()
{
fin>>n>>m;
int c;
for(i=1;i<=n;i++)
{
t[i]=i;
h[i]=1;
}
for(i=1;i<=m;i++)
{
fin>>x3>>y3>>c;
vv[i].u=x3;
vv[i].v=y3;
vv[i].cost=c;
vv[i].sel=0;
}
int tu,tv;
sort(vv+1,vv+m+1,cmp);
for(i=1;i<=m && ma<=n-1;i++)
{
tu=FindSet(vv[i].u);
tv=FindSet(vv[i].v);
if(tu!=tv)
{
total+=vv[i].cost;
vv[i].sel=1;
ma++;
UnionSet(tu,tv);
}
}
fout<<total<<endl;
fout<<ma<<endl;
for(i=1;i<=m;i++)
if(vv[i].sel==1)
fout<<vv[i].v<<" "<<vv[i].u<<"\n";
return 0;
}