### LeetCode Challenge #1466. Reorder Routes to Make All Paths Lead to the City Zero

There are `n` cities numbered from `0` to `n - 1` and `n - 1` roads such that there is only one way to travel between two different cities (this network form a tree). Last year, The ministry of transport decided to orient the roads in one direction because they are too narrow.

Roads are represented by `connections` where `connections[i] = [ai, bi]` represents a road from city `ai` to city `bi`.

This year, there will be a big event in the capital (city `0`), and many people want to travel to this city.

Your task consists of reorienting some roads such that each city can visit the city `0`. Return the minimum number of edges changed.

It’s guaranteed that each city can reach city `0` after reorder.

Example 1:

```Input: n = 6, connections = [[0,1],[1,3],[2,3],[4,0],[4,5]]
Output: 3
Explanation: Change the direction of edges show in red such that each node can reach the node 0 (capital).
```

Example 2:

```Input: n = 5, connections = [[1,0],[1,2],[3,2],[3,4]]
Output: 2
Explanation: Change the direction of edges show in red such that each node can reach the node 0 (capital).
```

Example 3:

```Input: n = 3, connections = [[1,0],[2,0]]
Output: 0
```

Constraints:

• `2 <= n <= 5 * 104`
• `connections.length == n - 1`
• `connections[i].length == 2`
• `0 <= ai, bi <= n - 1`
• `ai != bi`
##### Video Solution
###### C++ Solution
```				```
class Solution {
public:
int ans=0;
void dfs(unordered_map<int,vector<int>>&mp ,unordered_map<int,bool>&vis,int m){
vis[m]=true;
for(auto i:mp[m]){
if(i>=0){
if(!vis[i]){
dfs(mp,vis,i);
}
}
else{
i=abs(i);
if(!vis[i]){
ans++;
dfs(mp,vis,i);
}
}
}
}
int minReorder(int n, vector<vector<int>>& c) {
int s=c.size();
unordered_map<int,vector<int>>mp;
unordered_map<int,bool>vis;
for(int i=0;i<s;i++){
mp[c[i][1]].push_back(c[i][0]);
mp[c[i][0]].push_back(-c[i][1]);
}
dfs(mp,vis,0);
if(ans==0)return ans;
return ans;
}
};
```
```