トポロジカルソート

vviのグラフを入れるとviの順番が返ってくる

vector<int> tpr(vector<vector<int>> v){
    int n = v.size();
    vector<int>ans;
    vector<int> cnt(n,0);
    for(int i = 0;i < n;i++){
        for(int j : v[i]){
            cnt[j]++;
        }
    }
    queue<int> q;
    for(int i = 0;i < n;i++){
        if(cnt[i]==0)q.push(i);
    }
    while(q.size()!=0){
        int pos = q.front();
        ans.push_back(pos);
        q.pop();
        for(int i : v[pos]){
            cnt[i]--;
            if(cnt[i]==0){
                q.push(i);
            }
        }
    }
    return ans;
}