#include "bits/stdc++.h"
using namespace std;
#define rep(i,a,n) for(int i=a;i<n;i++)
#define ALL(s) s.begin(),s.end()
const int M=100010;
int INF=1000000007;
using ll=long long;



int main(){
	int n,m;
	int a[1010],b[1010],c[1010];
	cin>>n>>m;
	int dis[110][110]={};
	//ワーシャルフロイド法;
	rep(i,0,n){
		rep(j,0,n){
			if(i!=j)dis[i][j]=dis[j][i]=INF;
		}
	}
	rep(i,0,m){
		cin>>a[i]>>b[i]>>c[i];
		a[i]--,b[i]--;
		dis[a[i]][b[i]]=dis[b[i]][a[i]]=c[i];
	}
	rep(k,0,n){
		rep(i,0,n){
			rep(j,0,n){
				dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
			}
		}
	}
	//ワーシャルフロイド法により,
	//全ての経路を最短化した.
	//この時、j==a[i]ならa[i]→b[i]が最短経路となっている;
	int ans=m;
	rep(i,0,m){
		bool f=false;
		rep(j,0,n)if(dis[j][a[i]]+c[i]==dis[j][b[i]])f=true;
		if(f)ans--;
	}
	cout<<ans<<endl;
}
	