কম্পিউটার

C++ এ কোর্সের সূচি IV


ধরুন মোট n কোর্স আছে যা আমরা নিতে পারি, কোর্সগুলি 0 থেকে n-1 পর্যন্ত লেবেলযুক্ত।

কিছু কোর্সের সরাসরি পূর্বশর্ত থাকতে পারে, উদাহরণস্বরূপ, কোর্স 0 নিতে হলে আমাদের প্রথমে কোর্স 1 নিতে হবে, যা একটি জোড়া হিসাবে প্রকাশ করা হয়:[1,0]।

সুতরাং, যদি আমাদের অনেকগুলি কোর্স n থাকে, সরাসরি পূর্বশর্ত জোড়ার একটি তালিকা এবং কোয়েরি জোড়ার একটি তালিকা৷

আপনার প্রতিটি প্রশ্নের উত্তর খুঁজে পাওয়া উচিত [i] কোর্সের প্রশ্নগুলি[i][0] কোর্সের প্রশ্নের পূর্বশর্ত [i][1] বা না। অবশেষে, আমাদের বুলিয়ানের একটি তালিকা, প্রদত্ত প্রশ্নের উত্তর দিতে হবে।

আমাদের মনে রাখতে হবে যে যদি কোর্স a হয় অবশ্যই b এর পূর্বশর্ত এবং অবশ্যই b কোর্স c এর একটি পূর্বশর্ত, তাহলে, A কোর্স c এর পূর্বশর্ত।

সুতরাং, যদি ইনপুট n =3 এর মত হয়, পূর্বশর্ত =[[1,2],[1,0],[2,0]], প্রশ্ন =[[1,0],[1,2]], তাহলে আউটপুট হবে [সত্য, সত্য]

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • N :=110

  • একটি অ্যারে ret সংজ্ঞায়িত করুন

  • -এ একটি মানচিত্র সংজ্ঞায়িত করুন
  • প্রতিটি উপাদানের জন্য এটি v, করুন

    • গ্রাফের শেষে এটি[1] সন্নিবেশ করুন[it[0]]

    • ([এটি[1]] 1 দ্বারা বৃদ্ধি করুন)

  • এক সারি q

    সংজ্ঞায়িত করুন
  • আরম্ভ করার জন্য i :=0, যখন i

    • যদি in[i] 0 এর মত হয়, তাহলে −

      • q

        -এ ঢোকান
  • একটি মানচিত্র idx সংজ্ঞায়িত করুন

  • lvl শুরু করার জন্য :=1, যখন q খালি না থাকে, আপডেট করুন (lvl 1 দ্বারা বাড়ান), করুন −

    • sz :=q এর আকার

    • যখন sz 0 না হয়, প্রতিটি পুনরাবৃত্তিতে sz হ্রাস করুন, −

      করুন
      • নোড :=q এর প্রথম উপাদান

      • q

        থেকে উপাদান মুছুন
      • প্রতিটি উপাদানের জন্য এটি গ্রাফ[নোড]

        • (1 দ্বারা [এটি] হ্রাস করুন)

        • c[নোড]-এ x প্রতিটি উপাদানের জন্য, করুন

          • c[it]

            -এ x ঢোকান
        • c[it]

          -এ নোড সন্নিবেশ করান
        • যদি [এটি] 0 এর মত হয়, তাহলে −

          • এটি q

            -এ ঢোকান
  • প্রতিটি উপাদানের জন্য এটি x, করুন

    • ret এর শেষে সন্নিবেশ করান (এর ফ্রিকোয়েন্সি[0] c[it[1]]

  • রিটার্ন রিটার্ন

উদাহরণ

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<bool> v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << v[i] << ", ";
   }
   cout << "]"<<endl;
}
const int N = 110;
class Solution {
public:
   vector <int> graph[N];
   map <int, set <int>> c;
   vector<bool> checkIfPrerequisite(int n, vector<vector<int>>& v, vector<vector<int>>& x) {
      vector<bool> ret;
      map<int, int> in;
      for (auto& it : v) {
         graph[it[0]].push_back(it[1]);
         in[it[1]]++;
      }
      queue<int> q;
      for (int i = 0; i < n; i++) {
         if (in[i] == 0)
            q.push(i);
      }
      map<int, int> idx;
      for (int lvl = 1; !q.empty(); lvl++) {
         int sz = q.size();
         while (sz--) {
            int node = q.front();
            q.pop();
            for (auto& it : graph[node]) {
               in[it]--;
               for (auto& x : c[node])
                  c[it].insert(x);
               c[it].insert(node);
               if (in[it] == 0) {
                  q.push(it);
               }
            }
         }
      }
      for (auto& it : x) {
         ret.push_back(c[it[1]].count(it[0]));
      }
      return ret;
   }
};
main(){
   Solution ob;
   vector<vector<int>> prerequisites = {{1,2},{1,0},{2,0}}, queries = {{1,0},{1,2}};
   print_vector(ob.checkIfPrerequisite(3, prerequisites, queries));
}

ইনপুট

3, {{1,2},{1,0},{2,0}}, {{1,0},{1,2}}

আউটপুট

[1, 1, ]

  1. C++ এ কিল প্রসেস

  2. C++ এ কাঠবিড়ালি সিমুলেশন

  3. C++ এ কাজের সময়সূচীর ন্যূনতম অসুবিধা

  4. C++ এ আয়তক্ষেত্র ক্ষেত্র II