/*
这题一开始由于一个问题怎么也出不来,这问题可以用下列数据表示
10 2
1 10 100
5 6 101
AC代码输出时0,不解,是我理解出错了,还是题目有问题,抑或是测试数据太水呢??????????
*/
#include <stdio.h>
#include <string.h>
int m,n,f[200002],sum[200002]; //sum[i]是表示i到根结点之间数字之和,范围是find(i)<x<=i,在根结点前则为负
int find(int x)
{
if(x==f[x])
return x;
int xx=find(f[x]);
sum[x]+=sum[f[x]];
f[x]=xx;
return f[x];
}
void judge(int a,int b,int aa,int bb,int c)
{
f[bb]=aa;
sum[bb]=sum[a]-sum[b]+c;
}
int main()
{
while(scanf("%d %d",&n,&m)!=EOF)
{
int i,t=0;
for(i=0;i<=n;i++)
f[i]=i,sum[i]=0;
while(m--)
{
int a,b,c,aa,bb;
scanf("%d%d%d",&a,&b,&c);
a=a-1; //!!!
aa=find(a);
bb=find(b);
if(aa==bb&&sum[b]-sum[a]!=c)
t++;
else if(aa!=bb)
judge(a,b,aa,bb,c);
}
printf("%d\n",t);
}
return 0;
}