Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में कोर्स शेड्यूल IV


मान लीजिए कुल n कोर्स हैं जिन्हें हम ले सकते हैं, कोर्स 0 से n-1 तक लेबल किए गए हैं।

कुछ कोर्स के डायरेक्ट प्रीरिक्विज़ाइट हो सकते हैं, उदाहरण के लिए, कोर्स 0 लेने के लिए हमें पहले कोर्स 1 लेना होगा, जिसे एक जोड़ी के रूप में व्यक्त किया जाता है: [1,0]।

इसलिए, यदि हमारे पास कोर्स की संख्या n, डायरेक्ट प्रीरिक्विज़ाइट जोड़ों की सूची और क्वेरी जोड़ों की सूची है।

आपको प्रत्येक queries[i] का उत्तर ढूंढना है कि क्या कोर्स queries[i][0], कोर्स queries[i][1] का प्रीरिक्विज़ाइट है या नहीं। अंत में, हमें बूलियन की एक सूची लौटानी है, जो दिए गए क्वेरी के उत्तर हैं।

हमें ध्यान रखना होगा कि यदि कोर्स a, कोर्स b का प्रीरिक्विज़ाइट है और कोर्स b, कोर्स c का प्रीरिक्विज़ाइट है, तो कोर्स a, कोर्स c का प्रीरिक्विज़ाइट है।

इसलिए, यदि इनपुट है n = 3, prerequisites = [[1,2],[1,0],[2,0]], queries = [[1,0],[1,2]], तो आउटपुट होगा [true,true]

इसे हल करने के लिए, हम निम्न चरणों का पालन करेंगे:

  • N := 110

  • एक ऐरे ret परिभाषित करें

  • एक मैप in परिभाषित करें

  • v के प्रत्येक एलिमेंट it के लिए, करें

    • it[1] को graph[it[0]] के अंत में डालें

    • (in[it[1]] को 1 से बढ़ाएं)

  • एक क्यू q परिभाषित करें

  • i := 0 से शुरू करें, जब i < n, i बढ़ाते हुए, करें -

    • यदि in[i], 0 के समान है, तो -

      • i को q में डालें

  • एक मैप idx परिभाषित करें

  • lvl := 1 से शुरू करें, जब q खाली नहीं है, lvl बढ़ाते हुए, करें -

    • sz := q का आकार

    • जब sz 0 नहीं है, प्रत्येक इटरेशन में sz घटाते हुए, करें -

      • node := q का पहला एलिमेंट

      • q से एलिमेंट हटाएं

      • graph[node] के प्रत्येक एलिमेंट it के लिए

        • (in[it] को 1 से घटाएं)

        • c[node] के प्रत्येक एलिमेंट x के लिए, करें

          • x को c[it] में डालें

        • node को c[it] में डालें

        • यदि in[it], 0 के समान है, तो -

          • it को q में डालें

  • x के प्रत्येक एलिमेंट it के लिए, करें

    • (it[0] की फ्रीक्वेंसी c[it[1]] में) को ret के अंत में डालें

  • ret लौटाएं

उदाहरण

बेहतर समझ के लिए निम्न कार्यान्वयन देखें:

#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++ में गिलहरी सिमुलेशन C++ में गिलहरी सिमुलेशन

    एक पेड़, एक गिलहरी, और कई नट्स हैं। स्थितियों को 2D ग्रिड में सेल द्वारा दर्शाया जाता है। आपका लक्ष्य गिलहरी के लिए सभी नट्स को इकट्ठा करके उन्हें एक-एक करके पेड़ के नीचे रखने के लिए न्यूनतम दूरी ढूंढना है। गिलहरी एक समय में अधिकतम एक नट ले जा सकती है और चार दिशाओं में आगे बढ़ सकती है - ऊपर, नीचे,

  1. C++ में जॉब शेड्यूल की न्यूनतम कठिनाई C++ में जॉब शेड्यूल की न्यूनतम कठिनाई

    मान लीजिए हम कार्यों की एक सूची को d दिनों में शेड्यूल करना चाहते हैं। कार्य निर्भर हैं इसलिए, i-वें कार्य पर काम करने के लिए, हमें उन सभी कार्यों j को पूरा करना होगा जहां 0 <= j < i। हमें प्रत्येक दिन कम से कम एक कार्य पूरा करना होगा। एक कार्य शेड्यूल की कठिनाई वास्तव में d दिनों में से प्रत्येक द

  1. C++ में आयत क्षेत्रफल II (Rectangle Area II) - ओवरलैपिंग आयतों का कुल क्षेत्रफल C++ में आयत क्षेत्रफल II (Rectangle Area II) - ओवरलैपिंग आयतों का कुल क्षेत्रफल

    समस्या विवरण हमें अक्ष-संरेखित (axis-aligned) आयतों की एक सूची दी गई है। प्रत्येक आयत rectangle[i] = {x1, y1, x2, y2} द्वारा दर्शाया गया है, जहां (x1, y1) निचले-बाएं कोने का बिंदु है और (x2, y2) ऊपरी-दाएं कोने का बिंदु है। हमें तल (plane) में सभी आयतों द्वारा कवर किए गए कुल क्षेत्रफल को ज्ञात करना