Pagini recente » Cod sursa (job #2065709) | Cod sursa (job #2035169) | Cod sursa (job #1672858) | Cod sursa (job #1486354) | Cod sursa (job #3005396)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
int n,m;
int tata[400005];
int x,y,cost;
int ans;
vector <int> lst[200005];
vector <pair<int,int> > ras;
struct date
{
int x,y,cost;
} muchii[400005],alfa;
bool sortbycomp(date a,date b)
{
return (a.cost<b.cost);
}
void unire(int x,int y)
{
x=tata[x];
y=tata[y];
if(x!=y)
{
if(lst[x].size()<lst[y].size())
swap(x,y);
while(!lst[y].empty())
{
int nod=lst[y].back();
lst[x].push_back(nod);
lst[y].pop_back();
tata[nod]=x;
}
}
}
int main()
{
ios_base::sync_with_stdio(0);
fin.tie(0);
fin>>n>>m;
for(int i=1;i<=m;i++)
{
fin>>alfa.x>>alfa.y>>alfa.cost;
muchii[i]=alfa;
}
for(int i=1;i<=n;i++)
{
lst[i].push_back(i);
tata[i]=i;
}
sort(muchii+1,muchii+m+1,sortbycomp);
for(int i=1;i<=m;i++)
if(tata[muchii[i].x]!=tata[muchii[i].y])
{
int a=muchii[i].x;
int b=muchii[i].y;
unire(a,b);
ras.push_back(make_pair(a,b));
ans+=muchii[i].cost;
if(ras.size()==n-1)
break;
}
fout<<ans<<'\n';
fout<<ras.size()<<'\n';
for(int i=0;i<ras.size();i++)
fout<<ras[i].first<<' '<<ras[i].second<<'\n';
return 0;
}