// Candidates of No Shortest Paths
#include <iostream>
#include <algorithm>
using namespace std;
int n,m,a[1000],b[1000],c[1000];
int d[110][110];
int main(){
    cin>>n>>m;
    for(int i=0;i<=n;i++){
        for(int j=0;j<=n;j++){
            if(i==j)continue;
            d[i][j]=1e9;
        }
    }
    for(int i=0;i<m;i++){
        cin>>a[i]>>b[i]>>c[i];
        d[a[i]][b[i]]=c[i];
        d[b[i]][a[i]]=c[i];
    }
    for(int k=1;k<=n;k++){
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
            }
        }
    }
    int ans=0;
    for(int i=0;i<m;i++)if(d[a[i]][b[i]]!=c[i])ans++;
    cout<<ans<<endl;
    return 0;
}