Pagini recente » Cod sursa (job #2960685) | Cod sursa (job #2960781) | Cod sursa (job #2443178) | Cod sursa (job #497872) | Cod sursa (job #1803052)
#include <iostream>
#include <cmath>
#include <fstream>
#include <vector>
#include <queue>
#define inf 2000000001
using namespace std;
int n, m, dmin[1505], nrdrumuri[1505];
vector <pair <int, int> > G[1505];
struct dist
{
bool operator () (const int &x, const int &y)
{
return dmin[x]>dmin[y];
}
};
priority_queue <int, vector <int>, dist> q;
void read()
{
ifstream f("dmin.in");
f >> n >> m;
for(int i=0, x, y, c; i<m; ++i)
{
f >> x >> y >> c;
G[x].push_back(make_pair(y,c));
G[y].push_back(make_pair(x,c));
}
f.close();
}
void dijkstra()
{
int vfmin;
for(int i=2; i<=n; ++i) dmin[i]=inf; dmin[1]=1;
q.push(1); nrdrumuri[1]=1;
while(!q.empty())
{
vfmin=q.top(); q.pop();
for(int i=0; i<G[vfmin].size(); ++i)
{
if(dmin[G[vfmin][i].first] > dmin[vfmin] * G[vfmin][i].second)
{
dmin[G[vfmin][i].first] = dmin[vfmin] * G[vfmin][i].second;
nrdrumuri[G[vfmin][i].first]=nrdrumuri[vfmin];
q.push(G[vfmin][i].first);
}
else
if(dmin[G[vfmin][i].first] == dmin[vfmin] * G[vfmin][i].second)
{
nrdrumuri[G[vfmin][i].first] = nrdrumuri[G[vfmin][i].first] + nrdrumuri[vfmin];
}
}
}
}
void out()
{
ofstream g("dmin.out");
for(int i=2; i<=n; ++i)
g << nrdrumuri[i] <<' ';
g << '\n';
g.close();
}
int main()
{
read();
dijkstra();
out();
return 0;
}