这题要用bfs,bfs要比dfs快
dfs
class Solution {
public:
vector<int>ve[5*10000+5];
vector<pair<int,int>>undir[5*10000+5];
int res=0;
bool vis[5*10000+5];
void dfs(int st)
{
vis[st]=true;
for(int i=0;i<undir[st].size();i++)//无向图
{
auto p=undir[st][i];
if(!vis[p.first])
{
if(p.second==0)
{
res++;
}
dfs(p.first);
}
}
return ;
}
int minReorder(int n, vector<vector<int>>& connections) {
for(int i=0;i<connections.size();i++)
{
int x=connections[i][0];
int y=connections[i][1];
ve[y].push_back(x);
undir[x].push_back({y,0});
undir[y].push_back({x,1});
}
dfs(0);
return res;
}
};
bfs
class Solution {
public:
int minReorder(int n, vector<vector<int>>& connections) {
int res=0;
vector<pair<int,int>>undir[n];
vector<bool>vis(n,false);
for(int i=0;i<connections.size();i++)
{
int x=connections[i][0];
int y=connections[i][1];
// ve[y].push_back(x);
undir[x].push_back({y,0});
undir[y].push_back({x,1});
}
queue<int>que;
que.push(0);
while(!que.empty())
{
int st=que.front();
que.pop();
vis[st]=true;
for(int i=0;i<undir[st].size();i++)
{
auto p=undir[st][i];
if(!vis[p.first])
{
if(p.second==0)
{
res++;
}
que.push(p.first);
}
}
}
return res;
}
};