Pagini recente » Cod sursa (job #312342) | Cod sursa (job #488720) | Cod sursa (job #2053992) | Cod sursa (job #2767200) | Cod sursa (job #404479)
Cod sursa(job #404479)
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
#define pb push_back
#define f first
#define sf second.first
#define ss second.second
#define mp make_pair
#define p pair<int,pair<int,int> >
#define p2 pair<int,int>
#define pq priority_queue
#define DIM 200005
struct cmp {
bool operator()(const p &x,const p &y)
{
return (x.ss<y.ss);
}
};
vector <p> a;
vector <p2> s;
int n,m,r[DIM],t[DIM],sol;
int find (int &x)
{
if(x!=t[x])
t[x]=find(t[x]);
return t[x] ;
}
void unite (int x,int y)
{
if(r[x]>r[y])
{
unite(y,x);
return ;
}
r[y]+=r[x];
t[x]=y;
}
void read ()
{
int i,x,y,c;
scanf("%d%d",&n,&m);
for(i=1;i<=m;++i)
{
scanf("%d%d%d",&x,&y,&c);
a.pb (mp(x,mp(y,c)));
}
}
void solve ()
{
int i,n1,n2;
for(i=1;i<=n;++i)
t[i]=i;
for(i=0;i<(int)a.size ();++i)
{
n1=find(a[i].f);
n2=find(a[i].sf);
if(find(n1)!=find(n2))
{
sol+=a[i].ss;
s.pb (mp(a[i].f,a[i].sf));
unite(n1,n2);
}
}
}
void show ()
{
int i;
printf("%d\n%d\n",sol,s.size ());
for(i=0;i<(int)s.size ();++i)
printf("%d %d\n",s[i].f,s[i].second);
}
int main ()
{
freopen("apm.in","r",stdin);
freopen("apm.out","w",stdout);
read ();
sort(a.begin (),a.end (),cmp ());
solve ();
show ();
return 0;
}