๐—–๐—ฆ ๐—”๐—น๐—ด๐—ผ ๐Ÿ’ป ๐ŸŒ ใ€Ž๐—–๐—ผ๐—บ๐—ฝ๐—ฒ๐˜๐—ถ๐˜๐—ถ๐˜ƒ๐—ฒ ๐—ฃ๐—ฟ๐—ผ๐—ด๐—ฟ๐—ฎ๐—บ๐—บ๐—ถ๐—ป๐—ดใ€
9.63K subscribers
5.59K photos
3 videos
95 files
10.2K links
๐ŸšฉMain Group - @SuperExams
๐Ÿ“Job Updates - @FresherEarth

๐Ÿ”ฐAuthentic Coding Solutions(with Outputs)
โš ๏ธDaily Job Updates
โš ๏ธHackathon Updates & Solutions

Buy ads: https://telega.io/c/cs_algo
Download Telegram
int getMinimumInversions(int n, vector<int> g_from, vector<int> g_to) {
  vector<vector<int>> adj(n);
  set<pair<int, int>> edge;

  for (int i = 0; i < n - 1; ++i) {
    int u = g_from[i], v = g_to[i];
    u--, v--;

    adj[u].push_back(v);
    adj[v].push_back(u);

    edge.insert({u, v});
  }

  int val = 0;
  function<void(int, int)> dfs = [&](int cur, int par) {
    for (int it : adj[cur]) {
      if (it == par) continue;
      if (!edge.count({cur, it})) {
        val++;
      }
      dfs(it, cur);
    }
  };

  dfs(0, -1);

  int ans = val;
  function<void(int, int, int)> rerooting_dfs = [&](int cur, int par, int v) {
    ans = min(ans, v);

    for (int it : adj[cur]) {
      if (it == par) continue;

      int new_val = v;
      if (edge.count({cur, it})) {
        new_val++;
      } else {
        new_val--;
      }

      rerooting_dfs(it, cur, new_val);
    }
  };
  rerooting_dfs(0, -1, val);

  return ans;
}

Minimum Reversal (Bny)โœ