func_code_string: #include <bits/stdc++.h>   using namespace std;   template <class T>   using vc = vector<T>;   template <class T>   using vvc = vc<vc<T>>;   template <class T>   void mkuni(vector<T>& v) {     sort(v.begin(), v.end());     v.erase(unique(v.begin(), v.end()), v.end());   }   long long rand_int(long long l, long long r) {     static mt19937_64 gen(chrono::steady_clock::now().time_since_epoch().count());     return uniform_int_distribution<long long>(l, r)(gen);   }   template <class T>   void print(T x, int suc = 1) {     cout << x;     if (suc == 1)       cout <<   n ;     else       cout <<    ;   }   template <class T>   void print(const vector<T>& v, int suc = 1) {     for (int i = 0; i < v.size(); i++)       print(v[i], i == (int)(v.size()) - 1 ? suc : 2);   }   const int INF = 0x3f3f3f3f;   const int MAXN = 2e5 + 7;   const int maxn = 2e6 + 7;   int a[MAXN], b[MAXN];   int mx[maxn];   struct e {     int u, v, w;   } Edge[maxn];   bool cmp(e a, e b) { return a.w > b.w; }   int fa[maxn];   int find(int x) { return (x == fa[x] ? x : fa[x] = find(fa[x])); }   int main() {     int n, m, cnt = 0;     cin >> n >> m;     for (int i = 1; i <= n; ++i) cin >> a[i];     for (int i = 1; i <= m; ++i) cin >> b[i];     for (int i = 1; i <= n + m + 1; ++i) fa[i] = i;     long long s = 0;     for (int i = 1; i <= n; ++i) {       int sz;       cin >> sz;       for (int j = 1; j <= sz; ++j) {         int u;         cin >> u;         Edge[++cnt] = {u, i + m, a[i] + b[u]};         s += (a[i] + b[u]);       }     }     long long sum = 0;     sort(Edge + 1, Edge + cnt + 1, cmp);     for (int i = 1; i <= cnt; ++i) {       int u = Edge[i].u, v = Edge[i].v, w = Edge[i].w;       int fu = find(u), fv = find(v);       if (fu == fv) continue;       fa[fu] = fv;       sum += w;     }     cout << s - sum << endl;   }   