func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MAXN = 1e6 + 2;   vector<int> g[MAXN];   int d[MAXN], low[MAXN], scc[MAXN];   bool stacked[MAXN];   stack<int> s;   int ticks, current_scc;   void tarjan(int u) {     d[u] = low[u] = ticks++;     s.push(u);     stacked[u] = true;     const vector<int> &out = g[u];     for (int k = 0, m = out.size(); k < m; ++k) {       const int &v = out[k];       if (d[v] == -1) {         tarjan(v);         low[u] = min(low[u], low[v]);       } else if (stacked[v]) {         low[u] = min(low[u], low[v]);       }     }     if (d[u] == low[u]) {       int v;       do {         v = s.top();         s.pop();         stacked[v] = false;         scc[v] = current_scc;       } while (u != v);       current_scc++;     }   }   vector<pair<long long, long long> > adj[2 * MAXN];   vector<pair<long long, pair<long long, long long> > > reg;   long long peso[2 * MAXN];   long long dp[2 * MAXN];   long long getval(long long x) {     long long r = sqrt(2 * x);     if (r * r + r > 2 * x) r--;     return (r + 1) * x - (r * (r + 1) * (r + 2) / 6);   }   long long solve(long long u) {     long long high = 0;     if (dp[u] != -1) return dp[u];     for (auto d : adj[u]) {       long long v = d.first, w = d.second;       high = max(high, solve(v) + w);     }     return dp[u] = high;   }   int main() {     ios_base::sync_with_stdio(0);     cin.tie(0);     ;     memset(d, -1, sizeof(d));     memset(scc, -1, sizeof(scc));     long long n, m;     cin >> n >> m;     for (long long(i) = (0); (i) < (m); (i)++) {       long long u, v, w;       cin >> u >> v >> w;       g[u].push_back(v);       reg.push_back(make_pair((u), make_pair((v), (w))));     }     long long x;     cin >> x;     tarjan(x);     long long tot = current_scc;     for (auto t : reg) {       long long u = t.first, v = t.second.first, w = t.second.second;       if (scc[u] != -1 && scc[u] == scc[v]) {         peso[scc[u]] += getval(w);       } else if (scc[u] == -1 || scc[v] == -1)         continue;       else if (scc[u] != scc[v]) {         adj[scc[u] + tot].push_back(make_pair(scc[v], w));       }     }     for (long long(i) = (0); (i) < (tot); (i)++) {       adj[i].push_back(make_pair(i + tot, peso[i]));     }     memset(dp, -1, sizeof(dp));     cout << solve(scc[x]) << endl;     return 0;   }   