#include<iostream>
using namespace std;
#define MAX_V 110
#define MAX_E 10000
#define INF 10000
int d[MAX_V][MAX_V];
typedef struct edge{
  int f;
  int s;
  int c;
}edge;

edge e[MAX_E];

int main(void)
{
  int n, m;
  cin>>n>>m;
  for(int i=0; i<MAX_V; i++)
    for(int j=0; j<MAX_V; j++)
      if(i==j)
	d[i][j]=0;
      else
	d[i][j]=INF;
  
  for(int i=0; i<m; i++)
    {
      int a, b, c;
      cin>>a>>b>>c;
      edge x;
      x.f=a;
      x.s=b;
      x.c=c;
      e[i]=x;
      d[a][b]=c;
      d[b][a]=c;
    }

  for(int k=0; k<=n; k++)
    for(int i=0; i<=n; i++)
      for(int j=0; j<=n; j++)
	d[i][j]=min(d[i][j], d[i][k]+d[k][j]);

  int cnt=0;
  for(int i=0; i<m; i++)
    {
      edge x=e[i];
      if(d[x.f][x.s]<x.c)
	cnt++;
    }
  cout<<cnt<<endl;
  return 0;
}
