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

C++ में सभी कर्मचारियों को सूचित करने के लिए आवश्यक समय

मान लीजिए कि हमारे पास एक कंपनी है जिसमें प्रत्येक कर्मचारी के लिए एक विशिष्ट आईडी के साथ n कर्मचारी हैं। ये आईडी 0 से n - 1 तक होती हैं। कंपनी का मुखिया हेडआईडी वाला होता है। प्रत्येक कर्मचारी के पास प्रबंधक सरणी में दिया गया एक प्रत्यक्ष प्रबंधक होता है जहां प्रबंधक [i] i-वें कर्मचारी का प्रत्यक्ष प्रबंधक होता है, प्रबंधक [हेडआईडी] =-1। यह भी गारंटी है कि अधीनता संबंधों में पेड़ जैसी संरचना होती है। यहां कंपनी के प्रमुख कंपनी के सभी कर्मचारियों को एक जरूरी खबर के बारे में सूचित करना चाहते हैं। वह अपने प्रत्यक्ष अधीनस्थों को सूचित कर सकता है और जब तक सभी कर्मचारियों को तत्काल समाचार के बारे में पता नहीं चल जाता है, तब तक वे अपने अधीनस्थों को सूचित करेंगे। i-वें कर्मचारी को अपने सभी प्रत्यक्ष अधीनस्थों को सूचित करने के लिए सूचना समय [i] मिनटों की आवश्यकता होती है (इसलिए सूचना समय [i] मिनट के बाद, उसके सभी प्रत्यक्ष अधीनस्थ समाचार फैलाना शुरू कर सकते हैं)। हमें सभी कर्मचारियों को तत्काल समाचार के बारे में सूचित करने के लिए आवश्यक मिनटों की संख्या का पता लगाना होगा। तो अगर इनपुट n =6, हेडआईडी =2, मैनेजर =[2,2,-1,2,2,2], इनफ्रॉमटाइम =[0,0,1,0,0,0,0] की तरह है, तो आउटपुट 1 होगा।

C++ में सभी कर्मचारियों को सूचित करने के लिए आवश्यक समय

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

  • रिट:=0

  • एक सरणी को परिभाषित करें जिसे आकार n का ग्राफ कहा जाता है, रूट सेट करें:=-1

  • मैं के लिए 0 से लेकर प्रबंधक सरणी के आकार तक

    • यू:=मैनेजट[i] और वी:=मैं

    • यदि आप -1 है, तो रूट सेट करें:=v, और अगले पुनरावृत्ति के लिए जाएं

    • ग्राफ़ में v डालें[u]

  • एक कतार q को परिभाषित करें, q में रूट डालें, और एक सरणी को परिभाषित करें जिसे समय कहा जाता है, आकार n

  • जब तक q खाली न हो

    • curr :=q का अगला तत्व, और q से सामने वाले तत्व को हटा दें

    • यदि ग्राफ़ की सूची का आकार [कर] 0 है, तो अगले पुनरावृत्ति पर जाएं

    • मैं के लिए ग्राफ़ की सूची के आकार के लिए 0 श्रेणी में [curr]

      • q में ग्राफ़ [curr, i] डालें

      • समय [ग्राफ [कर्र, आई]]:=समय [कर्र] + सूचना समय [कर्र]

  • मेरे लिए 0 से n - 1:रिट:=अधिकतम रिट और समय [i]

  • वापसी रिट

उदाहरण (C++)

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int numOfMinutes(int n, int headID, vector<int>& manager, vector<int>& informTime) {
      int ret = 0;
      vector <int> graph[n];
      int root = -1;
      for(int i = 0; i < manager.size(); i++){
         int u = manager[i];
         int v = i;
         if(u == -1) {
            root = v;
            continue;
         }
         graph[u].push_back(v);
      }
      queue <int> q;
      q.push(root);
      vector <int> time(n);
      while(!q.empty()){
         int curr = q.front();
         q.pop();
         if(!graph[curr].size()) continue;
         for(int i = 0; i < graph[curr].size(); i++){
            q.push(graph[curr][i]);
            time[graph[curr][i]] = time[curr] + informTime[curr];
         }
      }
      for(int i = 0; i <n; i++)ret = max(ret, time[i]);
      return ret;
   }
};
main(){
   vector<int> v = {2,2,-1,2,2,2}, v1 = {0,0,1,0,0,0};
   Solution ob;
   cout << (ob.numOfMinutes(6, 2, v, v1));
}

इनपुट

6
2
[2,2,-1,2,2,2]
[0,0,1,0,0,0]

आउटपुट

1

  1. सी ++ में एक सरणी में सभी जोड़ों के योग के एक्सओआर का योग

    इस समस्या में, हमें n आकार का एक सरणी arr[] दिया जाता है। हमारा काम एक प्रोग्राम बनाना है जो एक सरणी में सभी जोड़ियों के योग के XOR का योग ज्ञात करे। आइए समस्या को समझने के लिए एक उदाहरण देखें, इनपुट: गिरफ्तारी[5, 7, 9] आउटपुट: 22 स्पष्टीकरण: (5+5) ^ (5+7) ^ (5+9) ^ (7+5) ^ (7+7) ^ (7+9) ^

  1. सी++ में एक पेड़ में सभी सेबों को इकट्ठा करने का न्यूनतम समय

    मान लीजिए कि हमारे पास एक अप्रत्यक्ष पेड़ है जिसमें n शीर्ष हैं और इनकी संख्या 0 से n-1 तक है, जिसके शीर्षों में कुछ सेब हैं। हम पेड़ के एक किनारे पर चलने में 1 सेकंड खर्च करते हैं। पेड़ में सभी सेबों को शीर्ष 0 से शुरू करने और इस शीर्ष पर वापस आने के लिए हमें सेकंड में न्यूनतम समय निकालना होगा। यह

  1. C++ में किसी सरणी में सभी अभाज्य संख्याओं का गुणनफल

    कुछ तत्वों के साथ एक पूर्णांक सरणी arr[] को देखते हुए, कार्य उस संख्याओं की सभी अभाज्य संख्याओं का गुणनफल खोजना है। अभाज्य संख्याएँ वे संख्याएँ होती हैं जिन्हें या तो 1 से या स्वयं संख्या से विभाजित किया जाता है, या एक अभाज्य संख्या एक ऐसी संख्या होती है जो 1 और स्वयं संख्या को छोड़कर किसी अन्य संख