func_code_string: #include <bits/stdc++.h>   using namespace std;   queue<int> q;   const int maxn = 40007;   const int maxm = 800007;   const int inf = 0x7f7f7f7f;   struct E {     int u, v, w, cf;   } e[maxm];   int first[maxn], nt[maxm], ES = 1;   bool acc[maxm];   inline void addE(int u, int v, int w, int cf) {     e[++ES] = (E){u, v, w, cf};     nt[ES] = first[u];     first[u] = ES;     return;   }   inline void add(int u, int v, int w) {     addE(u, v, w, 1);     addE(v, u, w, 0);     return;   }   int tot;   int N, M;   int cur[maxn];   int dep[maxn];   int S, T;   bool BFS() {     memset(dep, 0, sizeof(dep));     dep[S] = 1;     q.push(S);     int u, v;     while (!q.empty()) {       u = q.front();       q.pop();       for (int i = first[u]; i; i = nt[i]) {         v = e[i].v;         if (e[i].cf > 0 && acc[i] && !dep[v]) {           dep[v] = dep[u] + 1;           q.push(v);         }       }     }     return dep[T] != 0;   }   int dfs(int u, int f) {     if (u == T) return f;     int v, d, sum = 0;     for (int &i = cur[u]; i; i = nt[i]) {       v = e[i].v;       if (dep[v] == dep[u] + 1 && e[i].cf > 0 && acc[i]) {         d = dfs(v, min(f, e[i].cf));         if (d > 0) {           sum += d;           f -= d;           e[i].cf -= d;           e[i ^ 1].cf += d;           if (f <= 0) return sum;         }       }     }     return sum;   }   int solve() {     int re = 0;     while (BFS()) {       memcpy(cur, first, sizeof(first));       re += dfs(S, inf);     }     return re;   }   bool check(int p) {     for (int i = 1; i <= ES; i++) {       if (e[i].w <= p)         acc[i] = true;       else         acc[i] = false;       e[i].cf = (i & 1) ^ 1;     }     return solve() == N;   }   int main() {     scanf( %d%d , &N, &M);     int u, v, w;     int L = 0, R = 0, mid, ans = -1;     for (int i = 1; i <= M; i++) scanf( %d%d%d , &u, &v, &w), add(u, v + N, w);     S = 0;     T = 2 * N + 1;     for (int i = 1; i <= N; i++) add(S, i, -1), add(i + N, T, -1);     R = 1e9;     while (L <= R) {       mid = L + R >> 1;       if (check(mid))         ans = mid, R = mid - 1;       else         L = mid + 1;     }     printf( %d , ans);     return 0;   }   