Exemplo n.º 1
0
 int dfs(int curr, vb& path, int len, int inv, Bit& bit) const
 {
     path[curr] = true;
     ++len;
     bit.add(V[curr], 1);
     inv += bit.rangeCount(V[curr] + 1, 1000);
     int ret = INT_MAX;
     do {
         if (K == len) {
             ret = inv;
             break;
         }
         if (K < len)
             break;
         for (int i = 0; i < G[curr].size(); ++i) {
             int node = G[curr][i];
             if (!path[node]) {
                 ret = min(ret, dfs(node, path, len, inv, bit));
             }
         }
     } while (false);
     path[curr] = false;
     bit.add(V[curr], -1);
     return ret;
 }