func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 2e5 + 10;   const int M = (1e5 + 10 + N) * 2;   const int inf = 0x3f3f3f3f;   int n, m, S, T;   struct node {     int u, v, w;   } Edge[N];   bool cmp(node &a, node &b) { return a.w < b.w; }   int h[N], tot, e[M], f[M], ne[M];   int d[N], cur[N];   void add(int u, int v, int w) {     e[tot] = v, f[tot] = w, ne[tot] = h[u], h[u] = tot++;     e[tot] = u, f[tot] = 0, ne[tot] = h[v], h[v] = tot++;   }   bool bfs() {     queue<int> q;     q.push(S);     memset(d, -1, sizeof d);     d[S] = 0;     cur[S] = h[S];     while (!q.empty()) {       int u = q.front();       q.pop();       for (int i = h[u]; ~i; i = ne[i]) {         int v = e[i];         if (d[v] == -1 && f[i]) {           d[v] = d[u] + 1;           cur[v] = h[v];           if (v == T) return true;           q.push(v);         }       }     }     return false;   }   int dfs(int u, int limit) {     if (u == T) return limit;     int flow = 0;     for (int i = cur[u]; ~i && flow < limit; i = ne[i]) {       cur[u] = i;       int v = e[i];       if (d[v] == d[u] + 1 && f[i]) {         int t = dfs(v, min(f[i], limit - flow));         flow += t;         f[i] -= t;         f[i ^ 1] += t;       }     }     return flow;   }   int dinic() {     int flow, res = 0;     while (bfs()) {       while (flow = dfs(S, inf)) res += flow;     }     return res;   }   bool check(int mid) {     S = 0, T = 2 * n + 1;     for (int i = 0; i <= T; i++) h[i] = -1;     tot = 0;     for (int i = 1; i <= n; i++) add(S, i, 1);     for (int j = 1; j <= n; j++) add(n + j, T, 1);     for (int i = 1; i <= m; i++) {       if (Edge[i].w > mid) break;       add(Edge[i].u, n + Edge[i].v, Edge[i].w);     }     return dinic() == n;   }   int main() {     scanf( %d%d , &n, &m);     for (int i = 1; i <= m; i++)       scanf( %d%d%d , &Edge[i].u, &Edge[i].v, &Edge[i].w);     sort(Edge + 1, Edge + 1 + m, cmp);     int l = 1, r = Edge[m].w;     int ans = -1;     while (l <= r) {       int mid = (l + r) / 2;       if (check(mid)) {         r = mid - 1;         ans = mid;       } else         l = mid + 1;     }     printf( %d n , ans);     return 0;   }   