1class Solution {2public:3vector<int> Radj[50001], adj[50001], visited;4int bfs() {5int edges = 0;6queue<int> q;7q.push(0);89while (q.size()) {10auto src = q.front();11q.pop();12visited[src] = 1;1314for (auto &nbr : adj[src]) {15if (visited[nbr]) continue;16// this connection needs reverse orientation17++edges;18q.push(nbr);19}2021for (auto &nbr : Radj[src]) {22if (visited[nbr]) continue;23q.push(nbr);24}25}2627return edges;28}29int minReorder(int n, vector<vector<int>> &connections) {30visited.resize(n, 0);31for (auto &x : connections) adj[x[0]].push_back(x[1]), Radj[x[1]].push_back(x[0]);32return bfs();33}34};