Pagini recente » Cod sursa (job #2852137) | Cod sursa (job #2351729) | Cod sursa (job #392875) | Cod sursa (job #1360957) | Cod sursa (job #2348580)
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
ifstream in("apm.in");
ofstream out("apm.out");
const int M=400005;
const int N=200005;
int nr[N],t[N],n,m;
vector< pair<int,int> >sol;
struct muchie
{
int x,y,cost;
}v[M];
bool ok(muchie x,muchie y)
{
return(x.cost<y.cost);
}
int radacina(int x)
{
if(t[x]==0)
return x;
t[x]=radacina(t[x]);
return t[x];
}
void reuniune(int x,int y)
{
int rx=radacina(x);
int ry=radacina(y);
if(nr[rx]<nr[ry])
{
t[rx]=ry;
nr[ry]+=nr[rx];
}
else
{
t[ry]=rx;
nr[rx]+=nr[ry];
}
}
bool aceeasi(int x,int y)
{
return(radacina(x)==radacina(y));
}
int main()
{
int c=0;
in>>n>>m;
for(int i=1;i<=m;i++)
in>>v[i].x>>v[i].y>>v[i].cost;
sort(v+1,v+m+1,ok);
for(int i=1;i<=m;i++)
{
if(!aceeasi(v[i].x,v[i].y))
{
reuniune(v[i].x,v[i].y);
c=c+v[i].cost;
sol.push_back(make_pair(v[i].x,v[i].y));
}
}
out<<c<<'\n'<<n-1<<'\n';
for(int i=0;i<n-1;i++)
out<<sol[i].first<<' '<<sol[i].second<<'\n';
return 0;
}