class Solution { public: bool sequenceReconstruction(vector<int>& org, vector<vector<int>>& seqs) { unordered_map<int, vector<int>> g; unordered_map<int, int> indegrees; for(auto& seq : seqs) { for(int i = 0; i < seq.size(); ++i) { if(!i && indegrees.find(seq[i]) == indegrees.end()) indegrees[seq[i]] = 0; if(i < seq.size() - 1) { g[seq[i]].emplace_back(seq[i + 1]); ++indegrees[seq[i + 1]]; } } } queue<int> leaves; for(auto& p : indegrees) if(!p.second) leaves.push(p.first); //topological sorting vector<int> res; while(leaves.size()) { if(leaves.size() != 1) return false; int node = leaves.front(); res.emplace_back(node); leaves.pop(); for(auto next : g[node]) if(--indegrees[next] == 0) leaves.push(next); } return res == org && org.size() == indegrees.size();//in case there is circle e.g. [1] ,[[1],[2,3],[3,2]] } };