func_code_string: #include <bits/stdc++.h>   using namespace std;   struct Maxflow {     static const int MAXV = 20010;     long long INF = 1000000000000000ll;     struct Edge {       int v, r;       long long c;       Edge(int _v, long long _c, int _r) : v(_v), c(_c), r(_r) {}     };     int s, t;     vector<Edge> G[MAXV * 2];     int iter[MAXV * 2], d[MAXV * 2], gap[MAXV * 2], tot;     void init(int x) {       tot = x + 2;       s = x + 1, t = x + 2;       for (int i = 0; i <= tot; i++) {         G[i].clear();         iter[i] = d[i] = gap[i] = 0;       }     }     void addEdge(int u, int v, long long c) {       G[u].push_back(Edge(v, c, ((int)(G[v]).size())));       G[v].push_back(Edge(u, 0, ((int)(G[u]).size()) - 1));     }     long long dfs(int p, long long flow) {       if (p == t) return flow;       for (int &i = iter[p]; i < ((int)(G[p]).size()); i++) {         Edge &e = G[p][i];         if (e.c > 0 && d[p] == d[e.v] + 1) {           long long f = dfs(e.v, min(flow, e.c));           if (f) {             e.c -= f;             G[e.v][e.r].c += f;             return f;           }         }       }       if ((--gap[d[p]]) == 0)         d[s] = tot;       else {         d[p]++;         iter[p] = 0;         ++gap[d[p]];       }       return 0;     }     long long solve() {       long long res = 0;       gap[0] = tot;       for (res = 0; d[s] < tot; res += dfs(s, INF))         ;       return res;     }   } flow;   int n, m;   int main() {     cin >> n >> m;     flow.init(n + m + 5);     for (int i = 1; i <= n; i++) {       long long f;       scanf( %lld , &f);       flow.addEdge(m + i, flow.t, f);     }     long long tot = 0;     for (int i = 1; i <= m; i++) {       int x, y;       long long f;       scanf( %d%d%lld , &x, &y, &f);       flow.addEdge(flow.s, i, f);       flow.addEdge(i, m + x, flow.INF);       flow.addEdge(i, m + y, flow.INF);       tot += f;     }     printf( %lld n , tot - flow.solve());     return 0;   }   