#include <map>#include <set>#include <list>#include <queue>#include <deque>#include <stack>#include <string>#include <time.h>#include <cstdio>#include <math.h>#include <iomanip>#include <cstdlib>#include <limits.h>#include <string.h>#include <iostream>#include <fstream>#include <algorithm>using namespace std;#define LL long long#define MIN INT_MIN#define MAX INT_MAX#define PI acos(-1.0)#define FRE freopen("input.txt","r",stdin)#define FF freopen("output.txt","w",stdout)#define N 1005struct node{ int y,w;};vector<node> v[N];int n,m;int tt[N];int in[N];void init () { int i; for (i = 0; i <= n; i++ ) v[i].clear();}void gao () { int i,j; queue<int> qq; for (i = 0 ; i < n ; i++) { tt[i] = 0; if (!in[i]) { qq.push(i); tt[i] = 1; } } while (!qq.empty()) { int x = qq.front(); qq.pop(); for (i = 0; i < v[x].size(); i++) { node tmp = v[x][i]; int y = tmp.y; tt[y] = max(tt[y],tt[x] + tmp.w); in[y]--; if (!in[y]) { qq.push(y); } } } int ans = 0; for (i = 0; i < n; i++) { ans = max(ans,tt[i]); } printf("%d\n",ans);}int main () { while (scanf("%d%d",&n,&m) != EOF) { int i,j; init(); memset(in,0,sizeof(in)); for (i = 0; i < m; i++) { int a,b,c; scanf("%d%d%d",&a,&b,&c); in[b]++; node tmp; tmp.y = b; tmp.w = c; v[a].push_back(tmp); } gao(); } return 0;}