Pagini recente » Cod sursa (job #2681739) | Cod sursa (job #2320230) | Cod sursa (job #1721450) | Cod sursa (job #1866085) | Cod sursa (job #2669509)
#include <bits/stdc++.h>
using namespace std;
ifstream f("apm.in");
ofstream g("apm.out");
int viz[200005],val[200005],poz,n,m,x,y,cost,sol,i,tata[200005];
vector <pair <int,int > > v[200005],solutie;
void dfs (int x)
{
int i,nod,cost,minim;
viz[x]=1;
for (i=0;i<v[x].size();i++)
{
nod=v[x][i].first;
cost=v[x][i].second;
if (val[nod]>cost)
{
val[nod]=cost;
tata[nod]=x;
}
}
poz=0;
minim=INT_MAX;
for (i=1;i<=n;i++)
{
if (viz[i]==0&&val[i]<minim)
{
minim=val[i];
poz=i;
}
}
if (poz!=0)
{
sol+=minim;
solutie.push_back({poz,tata[poz]});
dfs(poz);
}
}
int main()
{
f>>n>>m;
for (i=1;i<=m;i++)
{
f>>x>>y>>cost;
v[x].push_back({y,cost});
v[y].push_back({x,cost});
}
for (i=1;i<=n;i++)
{
val[i]=INT_MAX;
}
val[1]=0;
dfs(1);
g<<sol<<'\n';
g<<solutie.size()<<'\n';
for (i=0;i<solutie.size();i++)
{
g<<solutie[i].first<<" "<<solutie[i].second<<'\n';
}
return 0;
}