Pagini recente » Cod sursa (job #2975880) | Cod sursa (job #2696025) | Cod sursa (job #99960) | Cod sursa (job #2718029) | Cod sursa (job #1570735)
#include <cstdio>
#include <iostream>
#include <vector>
#include <queue>
#include <utility>
#include <algorithm>
#include <functional>
#include <string>
#include <cstring>
#include <cmath>
#include <map>
#include <set>
#include <bitset>
#include <stack>
#define MOD 1000000007
#define NMAX 2000
#define MMAX 5005
#define INF 0x3f3f3f
#define mp make_pair
using namespace std;
FILE *fin = freopen("dmin.in", "r", stdin);
FILE *fout = freopen("dmin.out", "w", stdout);
typedef pair<int, int> pii;
vector<pair<double, int> > v[NMAX];
bool viz[NMAX];
double dist[NMAX];
int nr[NMAX];
int main() {
int n, m, i, x, y, c;
double c1;
scanf("%d%d", &n, &m);
for (i = 0; i < m; ++i) {
scanf("%d%d%d", &x, &y, &c);
c1 = log2(1.0*c);
v[x].push_back({ c1, y });
v[y].push_back({ c1, x });
}
priority_queue < pair<double, int>, vector<pair<double, int> >, greater<pair<double, int> > > pq;
pq.push({ 0.0, 1 });
for (i = 2; i <= n; ++i)
dist[i] = 1000000;
while (!pq.empty()) {
x = pq.top().second;
pq.pop();
//if (!viz[x]) {
//viz[x] = true;
for (i = 0; i < v[x].size(); ++i) {
y = v[x][i].second;
c1 = v[x][i].first;
if (dist[y] > dist[x] + c1) {
dist[y] = dist[x] + c1;
nr[y] = 1;
pq.push({ dist[y], y });
}
else if (dist[y] == dist[x] + c1) {
++nr[y];
pq.push({ dist[y], y });
}
}
//}
}
for (i = 2; i <= n; ++i)
printf("%d ", nr[i]);
return 0;
}