Pagini recente » Cod sursa (job #2062562) | Cod sursa (job #2600810) | Cod sursa (job #2513999) | Cod sursa (job #323160) | Cod sursa (job #471404)
Cod sursa(job #471404)
#include<fstream>
#include<vector>
#include<list>
#define NMAX 100005
using namespace std;
long n,m;
struct muchie
{
long vf1;
long vf2;
long cost;
muchie()
{}
muchie(long nvf1,long nvf2,long ncost)
{
cost=ncost;
vf1=nvf1;
vf2=nvf2;
}
};
vector<muchie> E;
vector<muchie> MST;
long tata[NMAX],cost;
void prelucreaza(long p,long q,long &m)
{
long i=p-1,j;
muchie pivot=E[m],aux;
for(j=p;j<=q-1;j++)
if(pivot.cost>=E[j].cost)
{
i++;
aux=E[j];
E[j]=E[i];
E[i]=aux;
}
aux=E[i+1];
E[i+1]=E[m];
E[m]=aux;
m=i+1;
}
void quick_sort(long p,long q)
{
long m=q;
if(p<q)
{
prelucreaza(p,q,m);
quick_sort(p,m-1);
quick_sort(m+1,q);
}
}
long find(long varf)
{
long temp=varf;
while(tata[temp]>=0)
temp=tata[temp];
return temp;
}
long cautaV1(long v1,long v2)
{
vector<muchie>::iterator itr;
int ok1=0,ok2=0;
for(itr=MST.begin(); itr!=MST.end(); itr++)
{
if((*itr).vf1==v1 || (*itr).vf2==v1)
ok1=1;
else
if((*itr).vf2==v2 || (*itr).vf1==v2)
ok2=1;
if(ok1==1 && ok2==1)
return 0;
}
return 1;
}
int main()
{
long i,x,y,c;
fstream fin,fout;
fin.open("apm.in",ios::in);
fout.open("apm.out",ios::out);
fin>>n>>m;
for(i=0;i<m;i++)
{
fin>>x>>y>>c;
muchie a(x,y,c);
E.push_back(a);
}
for(i=1;i<=n;i++)
{
tata[i]=-1;
}
quick_sort(0,m-1);
muchie a;
long varfUnu,varfDoi,tv1,tv2,temp,j;
for(i=0;i<m;i++)
{
a=E[i];
varfUnu=a.vf1;
varfDoi=a.vf2;
if((tv1=find(varfUnu)) != (tv2=find(varfDoi)))
{
tata[tv2]=tv1;
cost+=a.cost;
MST.push_back(a);
}
}
vector<muchie>::iterator itr;
fout<<cost<<'\n';
fout<<MST.size()<<'\n';
for(itr=MST.begin(); itr != MST.end(); itr++)
{
fout<<(*itr).vf1<<" "<<(*itr).vf2<<'\n';
}
fin.close();
fout.close();
return 0;
}