Pagini recente » Cod sursa (job #2038027) | Cod sursa (job #3237328) | Cod sursa (job #2784861) | Cod sursa (job #2642977) | Cod sursa (job #1894091)
#include <iostream>
#include <queue>
#include <vector>
#include <fstream>
#define nmax 50005
#define inf 100000
using namespace std;
int cont[nmax];
priority_queue<pair<int,int> > Q;
vector <pair< int, int > > G[nmax];
long long dist[nmax];
void dijkstra(pair<int,int> start){
Q.push(start);
int nod,cost,i;
while(!Q.empty()){
nod=Q.top().second;
cost=Q.top().first;
Q.pop();
for(i=0;i<G[nod].size();i++){
if (dist[G[nod][i].second]==-cost*G[nod][i].first) cont[G[nod][i].second]=cont[G[nod][i].second]+cont[nod];
if(dist[G[nod][i].second]>-cost*G[nod][i].first) {
dist[G[nod][i].second]=-cost*G[nod][i].first;
Q.push(make_pair(-dist[G[nod][i].second],G[nod][i].second));
cont[G[nod][i].second]=cont[nod];
}
}
}
}
using namespace std;
int main()
{
ifstream f("dmin.in");
ofstream g("dmin.out");
int n,m,i,x,y,c;
f >> n >> m;
for(i=2;i<=n;i++){
dist[i]=inf;
}
for(i=1;i<=m;i++){
f >> x >> y >> c;
G[x].push_back(make_pair(c,y));
G[y].push_back(make_pair(c,x));
}
cont[1]=1;
dist[1]=0;
pair <int,int > start;
start=make_pair(-1,1);
dijkstra(start);
for(i=2;i<=n;i++){
g << cont[i]%104659 << " ";
}
}