Pagini recente » Cod sursa (job #2611643) | Cod sursa (job #2602579) | Cod sursa (job #379048) | Cod sursa (job #1376770) | Cod sursa (job #2168300)
#include <fstream>
#include <algorithm>
using namespace std;
pair<int,pair<int,int> > graf[200002];
pair<int,int> sol[400002];
int w[200003];
int rad(int nod)
{
while(w[nod]>0)
{
nod=w[nod];
}
return nod;
}
int main()
{
int n,m,cost,nr,a,b,c,rx,ry;
ifstream in("apm.in");
ofstream out("apm.out");
in>>n>>m;
for(int i=1;i<=m;i++)
{
in>>a>>b>>c;
graf[i].first=c;
graf[i].second.first=a;
graf[i].second.second=b;
}
for(int i=1;i<=n;i++)
{
w[i]=-1;
}
sort(graf+1,graf+m+1);
cost=0;
nr=0;
for(int i=1;i<=m;i++)
{
rx=rad(graf[i].second.first);
ry=rad(graf[i].second.second);
if(rx!=ry)
{
nr++;
sol[nr].first=graf[i].second.first;
sol[nr].second=graf[i].second.second;
cost+=graf[i].first;
if(w[rx]<w[ry])
{
w[rx]+=w[ry];
w[ry]=rx;
}
else
{
w[ry]+=w[rx];
w[rx]=ry;
}
}
}
out<<cost<<"\n"<<nr<<"\n";
for(int i=1;i<=nr;i++)
{
out<<sol[i].first<<" "<<sol[i].second<<"\n";
}
return 0;
}