Pagini recente » Cod sursa (job #1826800) | Cod sursa (job #1524936) | Cod sursa (job #2591132) | Cod sursa (job #2468412) | Cod sursa (job #2470402)
#include <bits/stdc++.h>
#define Nmax 200005
using namespace std;
ifstream fin ("apm.in");
ofstream fout ("apm.out");
int d[Nmax], x, y, c, n, m, i, sum, t[Nmax];
bool viz[Nmax];
struct cmp
{
bool operator()(int x, int y)
{
if(d[x]!=d[y])
return d[x]<d[y];
return x<y;
}
};
struct muchie
{
int y, c;
};
set <int, cmp> s;
vector <muchie> v[Nmax];
int main()
{
fin >> n >> m;
for(i=1;i<=m;i++)
{
fin >> x >> y >> c;
v[x].push_back({y, c});
v[y].push_back({x, c});
}
for(i=2;i<=n;i++)
d[i]=1005;
s.insert(1);
while(!s.empty())
{
set <int, cmp> :: iterator it;
it=s.begin();
x=*it;
s.erase(it);
viz[x]=1;
sum+=d[x];
for(i=0;i<v[x].size();i++)
{
if(viz[v[x][i].y]==0&&v[x][i].c<d[v[x][i].y])
{
if(s.find(v[x][i].y)!=s.end())
s.erase(s.find(v[x][i].y));
d[v[x][i].y]=v[x][i].c;
t[v[x][i].y]=x;
s.insert(v[x][i].y);
}
}
}
fout << sum << '\n' << n-1 << '\n';
for(i=2;i<=n;i++)
fout << i << ' ' << t[i] << '\n';
return 0;
}