Pagini recente » Cod sursa (job #573289) | Cod sursa (job #1433876) | Cod sursa (job #1158827) | Cod sursa (job #211542) | Cod sursa (job #1805994)
#include <fstream>
#include <tuple>
#include <algorithm>
#include <vector>
using namespace std;
vector<tuple<int,int,int>> v;
vector<pair<int,int>> s;
ifstream f("apm.in");
ofstream g("apm.out");
int n,i,j,x,y,c,m,cost,a[200010],b[200010],t[200010];
int main()
{
f>>n>>m;
for(i=1;i<=n;i++)
t[i]=i;
for(;m;m--)
{
f>>x>>y>>c;
v.push_back(make_tuple(c,x,y));
}
sort(v.begin(),v.end());
for(auto it:v)
{
tie(c,x,y)=it;
a[1]=x;i=1;while(t[x]-x){x=t[x];i++;a[i]=x;}
b[1]=y;j=1;while(t[y]-y){y=t[y];j++;b[j]=y;}
if(x==y)
continue;
m++;cost+=c;s.push_back(make_pair(x,y));
x=y;
for(;i;i--)t[a[i]]=x;
for(;j;j--)t[b[j]]=y;
if(m==n-1)
break;
}
g<<cost<<'\n'<<m<<'\n';
for(auto it:s)
g<<it.first<<' '<<it.second<<'\n';
return 0;
}