Pagini recente » Cod sursa (job #2474422) | Cod sursa (job #2041427) | Cod sursa (job #643167) | Cod sursa (job #939502) | Cod sursa (job #2562870)
#include <fstream>
using namespace std;
ifstream cin("apm.in");
ofstream cout("apm.out");
#define MAXN 200005
int n, c, m;
int muchii;
int viz[MAXN];
struct nodes{
int x;
int y;
int cost;
} v[MAXN];
struct anss{
int x;
int y;
int cost;
} ans[MAXN];
void kruskal()
{int i,j,k;
i=1;
for(k=1;k<=n-1;k++)
{while(viz[v[i].x]==viz[v[i].y]&&viz[v[i].x]!=0)
i++;
c+=v[i].cost;
ans[i].x = v[i].x;
ans[i].y = v[i].y;
muchii++;
if(viz[v[i].x]+viz[v[i].y]==0)
viz[v[i].x]=viz[v[i].y]=v[i].x;
else
if(viz[v[i].x]*viz[v[i].y]==0)
viz[v[i].x]=viz[v[i].y]=viz[v[i].x]+viz[v[i].y];
else
{for(j=1;j<=n;j++)
if(viz[j]==viz[v[i].x]&&j!=v[i].x)
viz[j]=viz[v[i].y];
viz[v[i].x]=viz[v[i].y];
}
i++;
}
cout << c << "\n";
}
int main() {
cin >> n >> m;
int x, y, z;
for(int i = 1; i <= m; i++)
{
cin >> x >> y >> z;
v[x].x = x;
v[x].y = y;
v[x].cost = z;
v[y].x = x;
v[y].y = y;
v[y].cost = z;
}
kruskal();
cout << muchii << "\n";
for(int k=1;k<=n-1;k++)
{
if(ans[k].x != 0 && ans[k].y != 0)
cout << ans[k].x << " " <<ans[k].y << "\n";
}
return 0;
}