func_code_string: #include <bits/stdc++.h>   using namespace std;   template <typename T>   inline void gg(T &res) {     res = 0;     T fh = 1;     char ch = getchar();     while ((ch >  9  || ch <  0 ) && ch !=  - ) ch = getchar();     if (ch ==  - ) fh = -1, ch = getchar();     while (ch >=  0  && ch <=  9 ) res = res * 10 + ch -  0 , ch = getchar();     res *= fh;   }   inline int gi() {     int x;     gg(x);     return x;   }   inline long long gl() {     long long x;     gg(x);     return x;   }   const int MAXN = 610;   const int MAXM = 200010;   const int INF = 1e9;   const int BIG = 1e7;   int bt = 1, b[MAXN], NEXT[MAXM], to[MAXM], val[MAXM];   inline void add(int x, int y, int z) {     NEXT[++bt] = b[x];     b[x] = bt;     to[bt] = y;     val[bt] = z;     NEXT[++bt] = b[y];     b[y] = bt;     to[bt] = x;     val[bt] = 0;   }   int T, dis[MAXN], q[MAXN];   bool fc() {     for (int i = 1; i <= T; i++) dis[i] = 0;     dis[0] = 1;     int l = 1, r = 0;     q[++r] = 0;     while (l <= r) {       int x = q[l++];       for (int i = b[x]; i; i = NEXT[i]) {         if (!val[i] || dis[to[i]]) continue;         dis[to[i]] = dis[x] + 1;         if (to[i] == T) return 1;         q[++r] = to[i];       }     }     return 0;   }   int dfs(int x, int M) {     if (x == T) return M;     int ans = 0;     for (int i = b[x]; i; i = NEXT[i]) {       if (!val[i] || dis[x] + 1 != dis[to[i]]) continue;       int r = dfs(to[i], min(val[i], M - ans));       val[i] -= r;       val[i ^ 1] += r;       if ((ans += r) == M) return ans;     }     dis[x] = -1;     return ans;   }   int main() {     int n = gi();     T = n + n + 1;     for (int i = 1; i <= n; i++)       for (int t = gi(); t--;) add(i, n + gi(), INF);     long long ans = 0;     for (int i = 1; i <= n; i++) {       int x = BIG - gi();       ans -= x;       add(0, i, x);       add(n + i, T, BIG);     }     while (fc()) ans += dfs(0, INF);     printf( %I64d , ans);     return 0;   }   