#include #include using namespace std; const int NEG_INF = -1e9; int main() { int v, e; cin >> v >> e; vector> dp(v, vector(v, NEG_INF)); for (int i = 0; i < v; i++) dp[i][i] = 0; // 自环=0 for (int i = 0; i < e; i++) { int a, b, w; cin >> a >> b >> w; dp[a - 1][b - 1] = max(dp[a - 1][b - 1], w); // 可能多条边,取最大 } for (int k = 0; k < v; k++) { for (int i = 0; i < v; i++) { if (dp[i][k] <= NEG_INF / 2) continue; for (int j = 0; j < v; j++) { if (dp[k][j] <= NEG_INF / 2) continue; dp[i][j] = max(dp[i][j], dp[i][k] + dp[k][j]); } } } int mx = -1; for (int i = 0; i < v; i++) { for (int j = 0; j < v; j++) { if (dp[i][j] > NEG_INF / 2) { mx = max(mx, dp[i][j]); } } } mx == -1 ? cout << mx << endl; return 0; }