Pagini recente » Profil realjuve7 | Cod sursa (job #1492166) | Cod sursa (job #253879) | Rating Murarita Nadia (Nadia_26200) | Cod sursa (job #1708437)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std ;
ifstream f ("apm.in") ;
ofstream g ("apm.out") ;
const int NMAX = 100001, MMAX = 200001 ;
typedef struct Muchie
{ int inc,fin,cost;
bool ok=false;
}muchie;
int n , m ;
vector <Muchie> M ;
int tata[NMAX] , rang[NMAX] ;
bool comp(Muchie a , Muchie b)
{
return a.cost < b.cost ;
}
void citeste()
{ Muchie x;
f>>n>>m ;
for(int i=0;i<m;i++) M.push_back(x);
for (int i = 0 ; i < m ; i++)
{
f>>M[i].inc ;
f>>M[i].fin ;
f>>M[i].cost ;
M[i].inc;
M[i].fin;
}
}
void initializeaza()
{
for (int i = 0 ; i < n ; i++)
{
tata[i] = i ;
rang[i] = 1 ;
}
}
int radacina(int x)
{
if (x == tata[x]) return x ;
tata[x] = radacina (tata[x]) ;
return tata[x] ;
}
void uneste(int a , int b)
{
a = radacina(a) ;
b = radacina(b) ;
if (rang[b] > rang[a]) tata[a] = b ;
else tata[b] = a ;
if (rang[a] == rang[b]) rang[a]++ ;
}
bool sunt_unite (int a , int b)
{
a = radacina(a) ;
b = radacina(b) ;
return a == b ;
}
void apm()
{
initializeaza() ;
sort(M.begin() , M.end() , comp) ;
int a , b , c ;
int cost = 0, nr = 0 ;
for (int i = 0 ; i < m ; i++)
{
a = M[i].inc ;
b = M[i].fin ;
c = M[i].cost ;
if (!sunt_unite(a, b))
{
uneste(a, b);
M[i].ok = true;
cost += c;
nr++;
}
}
g<<cost<<"\n"<<nr<<"\n" ;
for (int i = 0 ; i < m ; i++)
if (M[i].ok) g<<M[i].inc<<" "<< M[i].fin<<"\n" ;
}
int main()
{
citeste() ;
apm() ;
return 0 ;
}