#include <bits/stdc++.h>
using namespace std;
typedef struct {
  int x;
  int y;
} P;
typedef struct {
  long long to;
  long long cost;
} edge;
int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  long long N, M;
  long long a[110], b[110], c[110];
  long long wa[110][110] = {};
  cin >> N >> M;
  for (int i = 0; i < (M); i++) {
    cin >> a[i] >> b[i] >> c[i];
    a[i]--;
    b[i]--;
    wa[a[i]][b[i]] = c[i];
    wa[b[i]][a[i]] = c[i];
  }
  for (int k = 0; k < (N); k++) {
    for (int i = 0; i < (N); i++) {
      for (int j = 0; j < (N); j++) {
        wa[i][j] = min(wa[i][j], wa[i][k] + wa[k][j]);
      }
    }
  }
  bool is_pass[110];
  for (int i = 0; i < (N); i++) {
    is_pass[i] = false;
  }
  for (int i = 0; i < (N); i++) {
    for (int j = 0; j < (N); j++) {
      if (i < j) {
        for (int k = 0; k < (M); k++) {
          if (wa[i][j] == wa[i][a[k]] + wa[b[k]][j]) {
            is_pass[k] = true;
          }
        }
      }
    }
  }
  long long ans = 0;
  for (int i = 0; i < (M); i++) {
    if (is_pass[i]) ans++;
  }
  cout << (ans) << endl;
  ;
}
