Pagini recente » Cod sursa (job #434409) | Cod sursa (job #1195106) | Cod sursa (job #2630065) | Cod sursa (job #1717885) | Cod sursa (job #2705149)
#include <fstream>
#define NMAX 400001
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
int n,m,i,j,rez,t[200001],r;
struct muchie
{
int x,y,val;
}G[NMAX];
int radacina(int x)
{
if(x==t[x])
return x;
return t[x]=radacina(t[x]);
}
void unire(int x,int y)
{
t[x]=y;
}
void sortareQ(int pi, int ps)
{
int p=G[pi].val,i=pi,j=ps;
do
{
while(G[i].val<p)
i++;
while(G[j].val>p)
j--;
if(i<=j)
{
swap(G[i],G[j]);
i++;
j--;
}
}while(i<=j);
if(pi<j)
sortareQ(pi,j);
if(ps>i)
sortareQ(i,ps);
}
int main()
{
fin>>n>>m;
for(int i=1;i<=m;i++)
fin>>G[i].x>>G[i].y>>G[i].val;
sortareQ(1,m);
for(int i=1;i<=n;i++)
t[i]=i;
for(int i=1;i<=m;i++)
{
if(radacina(G[i].x)!=radacina(G[i].y))
{
rez+=G[i].val;
G[i].val=-10001;
r++;
unire(radacina(G[i].x),radacina(G[i].y));
}
}
fout<<rez<<'\n'<<r<<'\n';
for(int i=1;i<=m;i++)
if(G[i].val==-10001)
fout<<G[i].y<<" "<<G[i].x<<'\n';
fin.close();
fout.close();
return 0;
}