func_code_string: #include <bits/stdc++.h>   using namespace std;   int pa[5009], siz[5009], occ[5009], tots = 0;   bool yay;   vector<pair<int, pair<int, int> > > edges;   int finder(int node) {     if (pa[node] != node) {       return pa[node] = finder(pa[node]);     }     return node;   }   void uniter(int x, int y) {     x = finder(x);     y = finder(y);     if (x == y) {       return;     }     pa[y] = x;     siz[x] += siz[y];     occ[x] += occ[y];     if (tots - occ[x] < siz[x]) {       yay = false;     }     return;   }   int main() {     int i, j, t1, t2, t3, t4, n, ans = 0;     scanf( %d , &n);     for (i = 0; i < n - 1; i++) {       scanf( %d %d %d , &t1, &t2, &t3);       edges.push_back(make_pair(t3, make_pair(t1, t2)));     }     sort(edges.begin(), edges.end());     for (i = 1; i <= n; i++) {       pa[i] = i;       siz[i] = 1;       scanf( %d , &occ[i]);       tots += occ[i];     }     if (n == 1) {       printf( 0 n );       return 0;     }     ans = edges[0].first;     yay = true;     for (i = 0; i < n - 1;) {       j = i;       while (edges[i].first == edges[j].first && j < n - 1) {         uniter(edges[j].second.first, edges[j].second.second);         j++;       }       if (yay && j < n - 1) {         ans = edges[j].first;       }       i = j;     }     printf( %d n , ans);     return 0;   }   