Pagini recente » Cod sursa (job #2260163) | Cod sursa (job #1345667) | Cod sursa (job #121715) | Cod sursa (job #2578103) | Cod sursa (job #1703196)
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
int n,m,a[20000][20000],T[200000],s[200000],C;
typedef pair<int, int> P;
queue <P> Q;
#define infinit 2000000000
ofstream g("apm.out");
void citire()
{
int x,y,c,i,j;
ifstream f("apm.in");
f>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
a[i][j]=infinit;
for(int i=1;i<=m;i++)
{
f>>x>>y>>c;
a[x][y]=a[y][x]=c;
}
f.close();
}
void afis();
void apm()
{
int i,ns,j,tata,fiu,minim;
ns=1;
for(i=1;i<=n;i++)
s[i]=1;
s[ns]=0;
for(i=1;i<n;i++)
{
minim=infinit;
for(j=1;j<=n;j++)
if(s[j]!=0)
if(a[j][s[j]]<minim)
{
minim=a[j][s[j]];
tata=s[j];
fiu=j;
}
T[fiu]=tata;
s[fiu]=0;
Q.push(make_pair(tata,fiu));
if(minim!=infinit)
C=C+minim;
for(j=1;j<=n;j++)
if(s[j]!=0)
if(a[j][fiu]<a[j][s[j]])
s[j]=fiu;
}
}
int main()
{
citire();
apm();
g<<C;
g<<'\n'<<n-1<<'\n';
while(!Q.empty())
{
g<<Q.front().first<<" "<<Q.front().second<<'\n';
Q.pop();
}
}