
class Solution {
public:
bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
if(numCourses==1 || prerequisites.size()==0)
return true;
vector<int> indeg(numCourses);
vector<vector<int>> course(numCourses);
queue<int> zero;
for(int i=0;i<prerequisites.size();i++)
{
indeg[prerequisites[i][0]]++;
course[prerequisites[i][1]].push_back(prerequisites[i][0]);
}
for(int i=0;i<numCourses;i++)
if(indeg[i]==0)
zero.push(i);
while(zero.size()!=0)
{
int pre = zero.front();
zero.pop();
numCourses--;
for(int i=0;i<course[pre].size();i++)
{
indeg[course[pre][i]]--;
if(indeg[course[pre][i]] == 0)
zero.push(course[pre][i]);
}
}
return numCourses==0;
}
};