Pagini recente » words | Istoria paginii runda/ccex2015 | Autentificare | Clasament preONI 2007 | Cod sursa (job #689969)
Cod sursa(job #689969)
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
struct noduri{int from,to,cost;};
vector<noduri>v,sol;
vector<int>c;
int n,m,s,Nrcomp,Msel;
bool cmp(noduri i, noduri j)
{
return (i.cost>j.cost);
}
void citire()
{
freopen("apm.in","r",stdin);
scanf("%d%d",&n,&m);
int i,x,y,z;
Nrcomp=n;
c.push_back(1);
for(i=1;i<=n;++i)
c.push_back(i);
// printf("%d\n",c[0]);
noduri aux;
for(i=1;i<=m;++i)
{
scanf("%d%d%d",&aux.from,&aux.to,&aux.cost);
v.push_back(aux);
}
}
void afisare()
{
//freopen("apm.out","w",stdout);
int i;
printf("%d\n%d\n",s,sol.size());
//sort_heap(v.begin(),v.end(),cmp);
for(i=0;i<sol.size();++i)
printf("%d %d\n",sol[i].from,sol[i].to);
}
int main()
{
citire();
make_heap(v.begin(),v.end(),cmp);
while(Msel<n-1)
{
noduri aux;
aux=v.front();
pop_heap(v.begin(),v.end(),cmp); v.pop_back();
if(c[aux.from]!=c[aux.to])
{
s=s+aux.cost;
sol.push_back(aux);
if(c[aux.from]>c[aux.to])
c[aux.from]=c[aux.to];
else
c[aux.to]=c[aux.from];
--Nrcomp;
++Msel;
}
}
afisare();
return 0;
}