Pagini recente » Cod sursa (job #2028435) | Cod sursa (job #146329) | Cod sursa (job #2626467) | Cod sursa (job #2035617) | Cod sursa (job #1708425)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream f("apm.in");
ofstream g("apm.out");
class muchie
{
public:
int a,b,cost;
bool ok;
muchie(int x,int y,int q)
{
a=x;
b=y;
cost=q;
ok=0;
};
};
class graf
{
public:
vector<muchie>muchii;
int n,m,tata[100000];
void initializeaza();
int radacina(int);
void uneste(int,int);
int unite(int,int);
graf();
void algkrus();
};
bool comp(muchie a ,muchie b)
{
return a.cost<b.cost;
}
graf::graf()
{
int a,b,c ;
f>>n>>m;
for (int i=1;i<=m;i++)
{
f>>a>>b>>c;
muchii.push_back(muchie(a,b,c));
}
}
void graf::initializeaza()
{
for (int i=1;i<=n;i++) tata[i]=i;
}
int graf::radacina(int x)
{
if (x==tata[x]) return x;
tata[x]=radacina(tata[x]);
return tata[x];
}
void graf::uneste(int a,int b)
{ int A=a,B=b;
a=radacina(a);
b=radacina(b);
if (B>A) tata[a]=b ;
else tata[b]=a;
}
int graf::unite(int a,int b)
{
a=radacina(a);
b=radacina(b);
return a==b;
}
void graf::algkrus()
{
initializeaza();
sort(muchii.begin(),muchii.end(),comp);
int a,b,c;
int cost=0,nr=0 ;
for (int i=0;i<m;i++)
{
a=muchii[i].a ;
b=muchii[i].b ;
c=muchii[i].cost ;
if(!unite(a,b))
{
uneste(a,b);
muchii[i].ok=1;
cost=cost+c;
nr++;
}
}
g<<cost<<"/n";
g<<nr<<"/n";
for (int i=0;i<m;i++)
if (muchii[i].ok) g<<muchii[i].a<<" "<< muchii[i].b<<"/n";
}
int main()
{
graf graf1 ;
graf1.algkrus() ;
f.close();
g.close();
return 0 ;
}