class Solution { private: unordered_map> rec_ing; //建set unordered_set supplies_set; public: vector findAllRecipes(vector& recipes, vector>& ingredients, vector& supplies) { for(auto sup:supplies) { supplies_set.emplace(sup); } for(int i=0;i ans; for(int i=0;i visted; visted.emplace(rec);//check if(dfs(rec,visted)) ans.emplace_back(rec); } return ans; } bool dfs(string rec,unordered_set& visited) { if(supplies_set.find(rec)!=supplies_set.end()) return true; if(rec_ing.find(rec) == rec_ing.end()&&(supplies_set.find(rec)==supplies_set.end()))//supplies no recipes no { return false; } bool res=true; for(auto ingr:rec_ing[rec]) { if((visited.find(ingr)==visited.end())&&supplies_set.find(ingr)==supplies_set.end())//not visited[ingr] and ingr not in supplies { visited.emplace(ingr); res=res&&dfs(ingr,visited); visited.erase(ingr); } else if((visited.find(ingr)!=visited.end())&&(supplies_set.find(ingr)==supplies_set.end())) { return false; } } return res; } };