Pagini recente » Cod sursa (job #2472517) | Cod sursa (job #2819216) | Cod sursa (job #2853033) | Cod sursa (job #1053294) | Cod sursa (job #1426554)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
const int INF = 1<<19;
int a[1500][1500],c, n, m, t[1500],cost[1500];
bool viz[1501];
void citire()
{
fin>>n>>m;
int x,y,c,i;
for(i=1; i<=m; i++)
{
fin>>x>>y>>c;
a[x][y]=c;
a[y][x]=c;
}
fin.close();
}
void apm()
{
for(int i=2; i<=n; i++)
{
if(a[1][i])
cost[i]=a[1][i];
else
cost[i]=INF;
t[i]=1;
}
viz[1]=1;
t[1]=0;
for(int j=1; j<n; j++)
{
int mn=INF,pz=-1;
for(int i=1; i<=n; i++)
if(viz[i]==0 && cost[i]<mn)
{
mn=cost[i];
pz=i;
}
c+=mn;
viz[pz]=1;
for(int i=1; i<=n; i++)
if(viz[i]==0 && a[pz][i]<cost[i] && a[pz][i])
{
t[i]=pz;
cost[i]=a[pz][i];
}
}
}
void afisare()
{
fout<<c<<"\n"<<n-1<<"\n";
for(int i=2; i<=n; i++)
if(a[t[i]][i])
fout<<t[i]<<" "<<i<<"\n";
}
int main()
{
citire();
apm();
afisare();
}