https://leetcode.com/problems/course-schedule-ii/description/
class Solution {
public:
vector<int> findOrder(int n, vector<pair<int, int>>& pres) {
vector< vector<int> > graph (n, vector<int>()) ;
vector< int > ind(n, 0);
for (int i = 0; i < pres.size(); i++) {
graph[ pres[i].second ].push_back(pres[i].first);
ind[ pres[i].first ] ++;
}
vector<int> ret;
//vector<int> visit(ind.size(), 0);
for (int i = 0; i < ind.size(); i++) {
int j = 0;
for (; j < n; j++) {
if(!ind[j] ) {
break;
}
}
if (j == n) return vector<int>() ;
ret.push_back(j);
if (ind[j] == 0) {
// q.push(i);
for (int to:graph[j]) {
ind[to] --;
}
}
ind[j] = -1;
}
return ret;
}
};