Pagini recente » Cod sursa (job #69400) | Cod sursa (job #1896410) | Cod sursa (job #1646407) | Cod sursa (job #2629405) | Cod sursa (job #1902359)
#include <cstdio>
#include <vector>
#define nmax 200001
using namespace std;
vector <int> a[nmax],c[nmax],w;
struct muchie{int i;int j;}v[nmax];
unsigned int n,m,x,i,j,ix,jx,k;
int d,dmin=1000,ctotal;
bool viz[nmax];
void citire()
{
freopen("apm.in","r",stdin);
freopen("apm.out","w",stdout);
scanf("%d %d",&n,&m);
for(x=1;x<=m;x++)
{
scanf("%d %d %d",&i,&j,&d);
a[i].push_back(j);
c[i].push_back(d);
a[j].push_back(i);
c[j].push_back(d);
if(d<dmin) dmin=d, ix=i, jx=j;
}
}
void search_next(int i)
{
for(unsigned int x=0;x<a[i].size();x++)
if(!viz[a[i][x]]&&c[i][x]<dmin)
{
dmin=c[i][x];
ix=i;
jx=a[i][x];
}
}
int main()
{
citire();
k=1; ctotal=dmin;
v[1].i=ix; viz[ix]=1;
v[1].j=jx; viz[jx]=1;
w.push_back(ix);
w.push_back(jx);
while(k!=n-1)
{
dmin=1000;
for(x=0;x<w.size();x++)
search_next(w[x]);
viz[jx]=1;
w.push_back(jx);
++k;
v[k].i=ix;
v[k].j=jx;
ctotal+=dmin;
}
printf("%d\n%d\n",ctotal,k);
for(x=1;x<=k;x++)
printf("%d %d\n",v[x].i,v[x].j);
return 0;
}