Pagini recente » Rating David Mihai (mihaidavid2002) | Cod sursa (job #1296295) | Rating Ioan - Adrian Dumitrescu (adrian_dumitrescu_fmi_uvt) | Cod sursa (job #1554024) | Cod sursa (job #2703071)
#include <fstream>
using namespace std;
ifstream fi("apm.in");
ofstream fo("apm.out");
int n,m,i,j,rez,t[200001],r;
struct muchie{int x,y,c;}v[400001];
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 Qsort(int ls, int ld)
{
int p=v[ls].c,i=ls,j=ld;
do{
while(v[i].c < p)
i++;
while(v[j].c > p)
j--;
if(i<=j)
{
swap(v[i],v[j]);
i++;
j--;
}
}while(i <= j);
if(ls < j)
Qsort(ls,j);
if(ld > i)
Qsort(i,ld);
}
int main()
{
fi >> n >> m;
for(i=1; i<=m; i++)
fi >> v[i].x >> v[i].y >> v[i].c;
Qsort(1,m);
for(i=1; i<=n; i++)
t[i] = i;
for(i=1; i<=m; i++)
{
if(Radacina(v[i].x) != Radacina(v[i].y))
{
rez += v[i].c;
v[i].c = -1;
r++;
Unire(Radacina(v[i].x),Radacina(v[i].y));
}
}
fo << rez << '\n' << r << '\n';
for(i=1; i<=m; i++)
if(v[i].c == -1)
fo << v[i].x << " " << v[i].y << '\n';
return 0;
}