Pagini recente » Formatare Textile | Cod sursa (job #1402851) | Cod sursa (job #1615754) | Cod sursa (job #2131198) | Cod sursa (job #2042058)
#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
#define nmax 1502
#define rem 104659
using namespace std;
ifstream fin ("dmin.in");
ofstream fout ("dmin.out");
priority_queue< pair<int,int>, vector< pair<int,int> >, greater< pair<int,int> > > Q;
vector< pair<int,int> > G[nmax];
int n,m,d[nmax];
long long r[nmax];
int lg(int x){
return 31-__builtin_clz(x);
}
void dijkstra(int node){
memset(d,inf,sizeof d);
for(int i=1;i<=n;++i)r[i]=1;
d[node]=0;
Q.push({0,node});
while(!Q.empty()){
int dist=Q.top().first;
int node_st=Q.top().second;
Q.pop();
if(d[node_st]<dist)continue;
for(auto edge: G[node_st]){
if(d[edge.first]>d[node_st]+lg(edge.second)){
d[edge.first]=d[node_st]+lg(edge.second);
r[edge.first]=r[node_st];
Q.push({d[edge.first],edge.first});
}
else if(d[edge.first]==(d[node_st]+lg(edge.second)))
r[edge.first]+=r[node_st];
}
}
}
int main()
{
int a,b,c;
fin>>n>>m;
for(int i=1;i<=m;++i){
fin>>a>>b>>c;
G[a].push_back({b,c});
G[b].push_back({a,c});
}
dijkstra(1);
for(int i=2;i<=n;++i)
fout<<r[i]<<' ';
fout<<endl;
return 0;
}