Pagini recente » Cod sursa (job #2795963) | Cod sursa (job #2691625) | Cod sursa (job #2902718) | Cod sursa (job #2673321) | Cod sursa (job #1713976)
#include <bits/stdc++.h>
using namespace std;
ifstream f("apm.in");
ofstream g("apm.out");
const int NMAX=200003;
const int MMAX=400003;
struct Pct{
int x,y,cost;
};
int Tata[NMAX],n,m;
Pct sol[NMAX],graf[MMAX];
inline bool cmp(const Pct A, const Pct B){
return A.cost<B.cost;
}
inline int Find(int x)
{
if(Tata[x]!=x)
Tata[x]=Find(Tata[x]);
return Tata[x];
}
inline void Union(int x,int y)
{
Tata[x]=y;
}
int main()
{
int cost=0,cnt=0;
f>>n>>m;
for(int i=1;i<=m;i++)
f>>graf[i].x>>graf[i].y>>graf[i].cost;
sort(graf+1,graf+m+1,cmp);
for(int i=1;i<=n;i++)
Tata[i]=i;
for(int i=1;i<=m;i++)
{
if(cnt==n)
break;
if(Tata[Find(graf[i].x)]!=Tata[Find(graf[i].y)])
{
cnt++;
cost+=graf[i].cost;
sol[cnt]=graf[i];
Union(Find(graf[i].x),Find(graf[i].y));
}
}
g<<cost<<"\n"<<cnt<<"\n";
for(int i=1;i<=cnt;i++)
g<<sol[i].x<<" "<<sol[i].y<<"\n";
return 0;
}