Pagini recente » Cod sursa (job #734502) | Cod sursa (job #383708) | Cod sursa (job #3321340) | Cod sursa (job #2834172) | Cod sursa (job #3343462)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
const int N=4e5+1;
struct elem
{
int x,y,cost;
bool operator<(const elem &e) const
{
return cost<e.cost;
}
}q[N];
struct DSU
{
int par[N],sz[N],cost[N];
void build(int n)
{
for(int i=1;i<=n;++i)
{
cost[i]=0;
par[i]=i;
sz[i]=1;
}
}
int find(int x)
{
return ((x==par[x])?x:par[x]=find(par[x]));
}
int unite(int x,int y,int c)
{
int rx=find(x);
int ry=find(y);
if(rx==ry) return 0;
if(sz[rx]<sz[ry]) swap(rx,ry);
sz[rx]+=sz[ry];
cost[rx]+=cost[ry];
cost[rx]+=c;
par[ry]=rx;
return 1;
}
}dsu;
int n,m,i,j,x,y,c;
vector<pair<int,int>> sol;
int main()
{
fin>>n>>m;
dsu.build(n);
for(i=1;i<=m;++i)
{
fin>>x>>y>>c;
q[i]={x,y,c};
}
sort(q+1,q+m+1);
for(i=1;i<=m;++i)
{
x=q[i].x;
y=q[i].y;
c=q[i].cost;
int b=dsu.unite(x,y,c);
if(b)
{
sol.push_back({x,y});
}
}
fout<<dsu.cost[dsu.find(1)]<<'\n';
fout<<sol.size()<<'\n';
for(auto e:sol)
{
fout<<e.first<<' '<<e.second<<'\n';
}
return 0;
}