Mai intai trebuie sa te autentifici.
Cod sursa(job #2464856)
Utilizator | Data | 28 septembrie 2019 23:46:29 | |
---|---|---|---|
Problema | Arbore partial de cost minim | Scor | 0 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 1.03 kb |
#include <fstream>
#include <algorithm>
#define Nmax 200002
using namespace std;
ifstream cin("apm.in");
ofstream cout("apm.out");
struct ura{
int x,y,cost,used;
} e[2*Nmax];
int n,m,i,c,nr;
int t[Nmax],rank[Nmax];
bool cmp(ura a,ura b)
{
return a.cost<b.cost;
}
int root(int k)
{
if(t[k]==0)
return k;
int r=root(t[k]);
t[k]=r;
return r;
}
void unire(int x,int y)
{
int rx=root(x),ry=root(y);
if(rx!=ry)
{
nr++;
e[i].used=1;
c+=e[i].cost;
if(rank[rx]>rank[ry])
t[ry]=rx;
else
{
t[rx]=ry;
if(rank[rx]==rank[ry])
rank[ry]++;
}
}
}
int main()
{
cin>>n>>m;
for (i=1;i<=m;i++)
cin>>e[i].x>>e[i].y>>e[i].cost;
sort(e+1,e+m+1,cmp);
for(i=1;i<=m;i++)
unire(e[i].x,e[i].y);
cout<<c<<'\n'<<nr<<'\n';
for(i=1;i<=m;i++)
if(e[i].used==1)
cout<<e[i].x<<" "<<e[i].y<<"\n";
return 0;
}