Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Solution {
- public:
- bool sequenceReconstruction(vector<int>& org, vector<vector<int>>& seqs) {
- int n=org.size();
- vector<int> inDegree(n+1,0);
- vector<vector<int>> graph(n+1);
- vector<bool> vis(n+1, false);
- for(auto seq:seqs){
- for(int i=0; i<seq.size(); i++){
- if(seq[i]>n || seq[i]<1) return false;
- vis[seq[i]] = true;
- if(i+1<seq.size()){
- if(seq[i+1] > n || seq[i+1]<1) return false;
- inDegree[seq[i+1]]++;
- graph[seq[i]].push_back(seq[i+1]);
- vis[seq[i+1]] = true;
- }
- }
- }
- queue<int> q;
- for(int i=1; i<=n; i++)
- if(!inDegree[i] && vis[i])
- q.push(i);
- if(q.size() > 1) return false;
- vector<int> order;
- while(!q.empty()){
- int count=0;
- int node = q.front(); q.pop();
- order.push_back(node);
- for(int child: graph[node]){
- if(--inDegree[child] == 0){
- q.push(child);
- count++;
- }
- }
- if(count>1) return false;
- }
- if(order.size() != org.size()) return false;
- for(int i=0; i<org.size(); i++)
- if(order[i] != org[i])
- return false;
- return true;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement