func_code_string: #include <bits/stdc++.h>   using namespace std;   template <class flow_t, const flow_t inf>   struct Dinic {     struct edge_t {       long long to;       flow_t cap, flow;       edge_t(long long to = 0, flow_t cap = 0, flow_t flow = 0)           : to(to), cap(cap), flow(flow) {}     };     long long n, s, t;     vector<vector<long long>> g;     vector<long long> d, ptr;     vector<edge_t> ed;     Dinic(long long n = 0, long long s = 0, long long t = 0) : n(n), s(s), t(t) {       g.assign(n + 5, vector<long long>());       ed.clear();     }     void add(long long u, long long v, long long cap) {       g[u].push_back(ed.size());       ed.push_back(edge_t(v, cap, 0));       g[v].push_back(ed.size());       ed.push_back(edge_t(u, 0, 0));     }     bool bfs() {       d.assign(n + 5, -1);       ptr.assign(n + 5, 0);       queue<long long> q;       d[s] = 0;       q.push(s);       while (!q.empty()) {         long long u = q.front();         q.pop();         for (long long id : g[u]) {           long long v = ed[id].to;           if (d[v] == -1 && ed[id].cap > ed[id].flow) {             d[v] = d[u] + 1;             q.push(v);           }         }       }       return d[t] != -1;     }     flow_t dfs(long long u, flow_t flow) {       if (u == t || !flow) return flow;       for (long long& i = ptr[u]; i < (long long)g[u].size(); ++i) {         long long id = g[u][i];         long long v = ed[id].to;         if (d[v] != d[u] + 1 || ed[id].cap <= ed[id].flow) continue;         flow_t nxt = dfs(v, min(flow, ed[id].cap - ed[id].flow));         if (nxt) {           ed[id].flow += nxt;           ed[id ^ 1].flow -= nxt;           return nxt;         }       }       return 0;     }     flow_t max_flow() {       while (bfs())         while (dfs(s, inf))           ;       flow_t ret = 0;       for (long long id : g[s]) ret += ed[id].flow;       return ret;     }     vector<long long> path;     flow_t trace(long long u) {       path.push_back(u);       if (u == t) return 1;       for (long long id : g[u]) {         long long v = ed[id].to;         if (ed[id].flow > 0) {           ed[id].flow--;           trace(v);           return 1;         }       }       return 0;     }     vector<vector<long long>> solve() {       vector<vector<long long>> ret;       while (true) {         path.clear();         if (trace(s))           ret.push_back(path);         else           break;       }       return ret;     }   };   signed main() {     ios_base::sync_with_stdio(false);     long long n, m;     cin >> n >> m;     long long s = 0, t = n + m + 1;     Dinic<long long, (long long)1e18> dn(n + m, s, t);     for (long long i = 1; i <= n; ++i) {       long long x;       cin >> x;       dn.add(i, t, x);     }     long long sum = 0;     for (long long i = 1; i <= m; ++i) {       long long u, v;       long long w;       cin >> u >> v >> w;       dn.add(n + i, u, 1e18);       dn.add(n + i, v, 1e18);       dn.add(s, n + i, w);       sum += w;     }     cout << sum - dn.max_flow() <<   n ;   }   