题目链接及官方题解
class Solution {
public:
vector<int> eventualSafeNodes(vector<vector<int>>& graph) {
int n=graph.size();
vector<vector<int>> rgaph(n,vector<int>());
int indeg[10005];
memset(indeg,0,sizeof(indeg));
for(int i=0;i<n;i++)
{
for(auto t:graph[i])
{
rgaph[t].push_back(i);
indeg[i]++;
}
}
vector<int> ans;
queue<int> qq;
for(int i=0;i<n;i++)
{
if(!indeg[i])
qq.push(i);
}
while(!qq.empty())
{
auto top=qq.front();
ans.push_back(top);
qq.pop();
for(auto t:rgaph[top])
{
indeg[t]--;
if(!indeg[t])
qq.push(t);
}
}
sort(ans.begin(),ans.end());
return ans;
}
};
class Solution {
public:
int dfs(vector<vector<int>> & graph,int * color,int i)
{
if( color[i]==2)
return 1;
if(color[i]==1)
return 0;
color[i]=1;
if(!graph[i].size())
{
color[i]=2;
return 1;
}
int yes=1;
for(auto t:graph[i])
{
if(!dfs(graph,color,t))
{
yes=0;
}
}
if(yes)
{
color[i]=2;
return 1;
}
else return 0;
}
vector<int> eventualSafeNodes(vector<vector<int>>& graph) {
int color[10005];
memset(color,0,sizeof(color));
vector<int> ans;
for(int i=0;i<graph.size();i++)
{
if(dfs(graph,color,i))
{
ans.push_back(i);
}
}
sort(ans.begin(),ans.end());
return ans;
}
};