Pagini recente » Cod sursa (job #21780) | Cod sursa (job #865021) | Cod sursa (job #3300739) | Cod sursa (job #1764324) | Cod sursa (job #1788237)
#include <iostream>
#include <fstream>
using namespace std;
//ifstream fin("date.in");
ifstream fin("apm.in");
ofstream fout("apm.out");
int a[200000][200000],m,n,v=1,s[200000],min1,t[200000],nr=0;
long int infinit=10000000;
void citire()
{
int i,j,x,y,z;
fin>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(i==j)
a[i][j]=0;
else
a[i][j]=infinit;
for(i=1;i<=m;i++)
fin>>x>>y>>z,a[x][y]=z,a[y][x]=z;
}
int cauta_nod(int &nod)
{
min1=infinit;
for(int i=1;i<=n;i++)
if(s[i]!=0)
if(a[i][s[i]]<min1)
{
min1=a[i][s[i]];
nod=i;
}
return min1;
}
void actualizeaza(int nod)
{
for(int i=1;i<=n;i++)
if(s[i]!=0)
if(a[i][s[i]]>a[i][nod])
s[i]=nod;
}
int main()
{
int k,i,cost=0,nod=1;
citire();
s[v]=0;
for(i=1;i<=n;i++)
if(i!=v)
s[i]=v;
for(k=1;k<=n-1;k++)
{
min1=cauta_nod(nod);
t[nod]=s[nod];
cost=cost+min1;
s[nod]=0;
actualizeaza(nod);
}
fout<<cost<<endl;
for(i=1;i<=n;i++)
if(i!=v)
nr++;
fout<<nr<<endl;
for(i=1;i<=n;i++)
if(i!=v)
fout<<t[i]<<" "<<i<<endl;
return 0;
}