func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MAXN = 1000002;   long long memo[MAXN];   long long cost[MAXN];   int tin[MAXN];   int low[MAXN];   bool in_stack[MAXN];   int Stack[MAXN];   int comp[MAXN];   vector<pair<int, int> > g[MAXN];   vector<pair<int, int> > t[MAXN];   int n, m, s;   int u, v, w;   int SCC, T, top;   void fast_io() {     ios::sync_with_stdio(false);     cin.tie(NULL);   }   long long contrib(int o) {     int lo = 0, hi = o;     int n = -1;     while (lo <= hi) {       int mid = (lo + hi) >> 1;       if (1LL * mid * (mid + 1) <= (o << 1))         n = mid, lo = mid + 1;       else         hi = mid - 1;     }     return 1LL * o * (n + 1) - 1LL * n * (n + 1) * (n + 2) / 6;   }   void tarjan(int u) {     low[u] = tin[u] = ++T;     Stack[top++] = u, in_stack[u] = 1;     for (auto v : g[u]) {       if (!tin[v.first]) tarjan(v.first);       if (in_stack[v.first]) low[u] = min(low[u], low[v.first]);     }     if (tin[u] == low[u]) {       ++SCC;       while (top) {         int v = Stack[--top];         in_stack[v] = 0, comp[v] = SCC;         if (u == v) break;       }     }   }   long long solve(int u) {     if (memo[u] != -1) return memo[u];     long long res = cost[u];     for (auto v : t[u]) {       res = max(res, cost[u] + v.second + solve(v.first));     }     return memo[u] = res;   }   int main() {     fast_io();     cin >> n >> m;     for (int i = 0; i < m; i++) {       cin >> u >> v >> w;       g[u].push_back(make_pair(v, w));     }     cin >> s;     tarjan(s);     for (int i = 1; i <= n; i++) {       if (!tin[i]) continue;       int u = comp[i];       for (auto v : g[i]) {         int to = comp[v.first];         if (u != to)           t[u].push_back(make_pair(to, v.second));         else           cost[u] += contrib(v.second);       }     }     memset(memo, -1, sizeof(memo));     printf( %lld n , solve(comp[s]));     return 0;   }   