Pagini recente » Arhiva de probleme | Cod sursa (job #2263852) | Cod sursa (job #1127891) | Cod sursa (job #1750900) | Cod sursa (job #1002212)
#include <cstdio>
#include <cmath>
#include <vector>
#include <queue>
#include <utility>
#define FILEIN "dmin.in"
#define FILEOUT "dmin.out"
const int EPS = 1e-8;
const int NMAX = 1505;
using namespace std;
double D[NMAX];
int P[NMAX];
vector<int> A[NMAX];
vector<double> C[NMAX];
int N, M;
queue<pair<int, double> > Q;
int comp(double x, double y) {
double rez = x-y;
if (rez < -EPS)
return -1;
if (rez > EPS)
return 1;
return 0;
}
void dijkstra() {
D[1] = 0;
for ( int i = 2; i <= N; i++) {
D[i] = 250000;
}
Q.push(make_pair(1, (double)0));
while (!Q.empty()) {
int idx; double dist;
idx = Q.front().first;
dist = Q.front().second;
Q.pop();
for ( int i = 0; i < A[idx].size(); i++) {
if (comp(dist + C[idx][i], D[A[idx][i]]) < 0) {
D[A[idx][i]] = C[idx][i] + dist;
P[A[idx][i]] = 1;
Q.push(make_pair(A[idx][i], D[A[idx][i]]));
} else if (comp(dist + C[idx][i], D[A[idx][i]]) == 0) {
P[A[idx][i]]++;
Q.push(make_pair(A[idx][i], D[A[idx][i]]));
}
}
}
}
int main() {
freopen(FILEIN, "r", stdin);
freopen(FILEOUT, "w", stdout);
scanf("%d %d", &N, &M);
for ( int i = 1, x, y, c; i <= M; i++) {
scanf("%d %d %d", &x, &y, &c);
A[x].push_back(y); C[x].push_back(log(c));
A[y].push_back(x); C[y].push_back(log(c));
}
dijkstra();
for ( int i = 2; i <= N; i++) {
printf("%d ", P[i]);
}
printf("\n");
return 0;
}