Advertisement
nikunjsoni

444

May 31st, 2021
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.48 KB | None | 0 0
  1. class Solution {
  2. public:
  3.     bool sequenceReconstruction(vector<int>& org, vector<vector<int>>& seqs) {
  4.         int n=org.size();
  5.         vector<int> inDegree(n+1,0);
  6.         vector<vector<int>> graph(n+1);
  7.         vector<bool> vis(n+1, false);
  8.         for(auto seq:seqs){
  9.             for(int i=0; i<seq.size(); i++){
  10.                 if(seq[i]>n || seq[i]<1) return false;
  11.                 vis[seq[i]] = true;
  12.                 if(i+1<seq.size()){
  13.                     if(seq[i+1] > n || seq[i+1]<1) return false;
  14.                     inDegree[seq[i+1]]++;
  15.                     graph[seq[i]].push_back(seq[i+1]);
  16.                     vis[seq[i+1]] = true;
  17.                 }
  18.             }
  19.         }
  20.        
  21.         queue<int> q;
  22.         for(int i=1; i<=n; i++)
  23.             if(!inDegree[i] && vis[i])
  24.                 q.push(i);
  25.    
  26.         if(q.size() > 1) return false;
  27.        
  28.         vector<int> order;
  29.         while(!q.empty()){
  30.             int count=0;
  31.             int node = q.front(); q.pop();  
  32.             order.push_back(node);
  33.             for(int child: graph[node]){
  34.                 if(--inDegree[child] == 0){
  35.                     q.push(child);
  36.                     count++;
  37.                 }
  38.             }
  39.             if(count>1) return false;
  40.         }
  41.        
  42.         if(order.size() != org.size()) return false;
  43.         for(int i=0; i<org.size(); i++)
  44.             if(order[i] != org[i])
  45.                 return false;
  46.        
  47.         return true;
  48.     }
  49.    
  50. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement