Pagini recente » Cod sursa (job #340723) | Cod sursa (job #870024) | Diferente pentru utilizator/wacky_coder intre reviziile 13 si 8 | Cod sursa (job #1370108) | Cod sursa (job #496437)
Cod sursa(job #496437)
#include <fstream>
#include <set>
#include <vector>
#include <limits>
using namespace std;
#define NMax 50001
int N, M;
vector< pair<int, int> > W[NMax];
vector<int> D;
vector<bool> V;
vector< pair<int, int> > F;
set< pair<int, int> > H;
void read()
{
int u, v, c;
ifstream fin;
fin.open("apm.in", fstream::in);
fin >> N >> M;
while (M--)
{
fin >> u >> v >> c;
W[u].push_back(pair<int, int>(v, c));
W[v].push_back(pair<int, int>(u, c));
}
fin.close();
}
void solve()
{
int u, v, c;
for (int i = 0; i <= N; ++i)
{
D.push_back(INT_MAX);
F.push_back(pair<int, int>(0, INT_MAX));
V.push_back(false);
}
D[1] = 0;
F[1] = pair<int, int>(0, 0);
V[1] = true;
H.insert(pair<int, int>(0, 1));
while(!H.empty())
{
u = H.begin()->second;
V[u] = true;
H.erase(*H.begin());
for (vector< pair<int, int> >::iterator i = W[u].begin(); i != W[u].end(); ++i)
{
v = i->first;
if (V[v] == false)
{
c = i->second;
if (D[v] > c)
{
D[v] = c;
F[v] = pair<int, int>(u, c);
H.insert(pair<int, int>(D[v], v));
}
}
}
}
}
void write()
{
ofstream fout("apm.out");
int S = 0;
for (int i = 1; i <= N; ++i)
S += F[i].second;
fout << S << '\n';
fout << N - 1 << '\n';
for (int i = 1; i <= N; ++i)
if (F[i].first > 0)
fout << i << ' ' << F[i].first << '\n';
fout.close();
}
int main()
{
read();
solve();
write();
return 0;
}