#include <iostream>
#include <algorithm>
#include <vector>
#include <tuple>
using namespace std;

int INF=1e8;
int d[100][100];
vector<tuple<int,int,int>> V;

int main(){
    fill(d[0],d[100],INF);
    int N,M;
    cin>>N>>M;
    for(int i=0;i<N;i++){
        d[i][i]=0;
    }
    for(int i=0;i<M;i++){
        int a,b,c;
        cin>>a>>b>>c;
        a--;b--;
        d[a][b]=d[b][a]=c;
        V.emplace_back(a,b,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 ans=0;
    for(auto v:V){
        if(d[get<0>(v)][get<1>(v)]!=get<2>(v)) ans++;
    }
    cout<<ans<<endl;
    return 0;
}