Pagini recente » Cod sursa (job #1697190) | Cod sursa (job #1845335) | Cod sursa (job #1990094) | Cod sursa (job #2417031) | Cod sursa (job #608502)
Cod sursa(job #608502)
#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>
//ATENTIUE LA CITIRE
#define nmax 1501
#define inf 0x3f3f
using namespace std;
typedef vector<pair<int,int> >::iterator it;
vector<pair<int,int> > gf[nmax];
int n, m, viz[nmax], d[nmax], rez[nmax], t[nmax];
struct comp{
bool operator () (const int &a, const int &b){
return d[a]>d[b];
}
};
void bf(){
memset(d, inf, sizeof(d));
priority_queue<int, vector<int>, comp> Q;
//memset(rez,1,sizeof(rez));
//for(int i=0;i<=n;i++) rez[i] = 1;
d[1]=1;
viz[1]=1;
rez[1]=1;
for(Q.push(1); !Q.empty();){
int act = Q.top();
viz[act] = 0;
Q.pop();
for(it i=gf[act].begin();i!=gf[act].end(); i++){
int vecin = i->first;
int cost = i->second;
if (d[vecin] > d[act] * cost){
d[vecin] = d[act] * cost;
if (viz[vecin] == 0){
Q.push(vecin);
viz[vecin]=1;
}
}
if (d[vecin] == d[act] * cost){
rez[vecin]+=rez[act];
if (viz[vecin] ==0){
Q.push(vecin);
viz[vecin] = 1;
}
}
}
}
}
void scrie_drum(int i){
if (t[i]!=0) scrie_drum(t[i]);
printf("%d ", i);
}
int main(){
freopen("dmin.in","r",stdin);
freopen("dmin.out","w",stdout);
scanf("%d%d\n", &n, &m);
for(int i=1; i<=m; i++){
int x, y, c;
scanf("%d%d%d\n", &x,&y,&c);
gf[x].push_back(make_pair(y,c));
gf[y].push_back(make_pair(x,c));
}
bf();
//scrie_drum(2);
for(int i=2; i<=n; i++) printf("%d ", rez[i]);
}