Pagini recente » Cod sursa (job #2657283) | Cod sursa (job #3237790) | Cod sursa (job #1052226) | Cod sursa (job #1020277) | Cod sursa (job #605291)
Cod sursa(job #605291)
# include <fstream>
# include <vector>
# include <set>
using namespace std;
vector <int> a[1501], b[1501];
int n, m, i, j, x, y, cost, dm[1501], sol[1501];
set < pair <int, int> > st;
void dijkstra ()
{
st.insert (make_pair (1, 1));// cost, nod
sol[1] = 1;
dm[1] = 0;
for (int i = 2; i <= n; ++i) dm[i] = 2000000000;
for (; st.size () > 0; )
{
int cost = (*st.begin ()).first, nod = (*st.begin ()).second;
vector <int> :: iterator it1, it2;
st.erase ((*st.begin ()));
for (it1 = a[nod].begin (), it2 = b[nod].begin (); it1 != a[nod].end (); ++it1, ++it2)
if (dm[*it1] > cost * (*it2))
dm[*it1] = cost * (*it2), sol[*it1] = sol[nod], st.insert (make_pair (dm[*it1], (*it1)));
else
if (dm[*it1] == cost * (*it2))
sol[*it1] += sol[nod];
}
}
int main ()
{
ifstream f ("dmin.in");
ofstream g ("dmin.out");
f >> n >> m;
for (i = 1; i <= m; ++i)
{
f >> x >> y >> cost;
a[x].push_back (y);
a[y].push_back (x);
b[x].push_back (cost);
b[y].push_back (cost);
}
dijkstra ();
for (i = 2; i <= n; ++i)
g << sol[i] << ' ';
g << '\n';
g.close ();
return 0;
}