思路:
toposort最经典的板子题。
class Solution {
public:
vector<int>ve[100005];
int indeg[100005];
int outdeg[100005];
bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
for(int i=0;i<prerequisites.size();i++)
{
ve[prerequisites[i][1]].push_back(prerequisites[i][0]);
outdeg[prerequisites[i][1]]++;
indeg[prerequisites[i][0]]++;
}
queue<int>que;
for(int i=0;i<numCourses;i++)
{
if(indeg[i]==0)que.push(i);
}
int ans=0;
while (!que.empty())
{
ans++;
int p=que.front();
que.pop();
for(int i=0;i<ve[p].size();i++)
{
indeg[ve[p][i]]--;
if (indeg[ve[p][i]]==0)que.push(ve[p][i]);
}
}
return ans==numCourses;
}
};