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

पायथन में सभी शहरों की अधिकतम संभव जनसंख्या खोजने का कार्यक्रम

उस देश पर विचार करें जिसे एन नोड्स और एन-1 किनारों वाले पेड़ के रूप में दर्शाया गया है। अब प्रत्येक नोड एक शहर का प्रतिनिधित्व करता है, और प्रत्येक किनारा एक सड़क का प्रतिनिधित्व करता है। हमारे पास संख्या स्रोत और नियति आकार N-1 की दो सूचियाँ हैं। उनके अनुसार i-th सड़क स्रोत [i] को गंतव्य [i] से जोड़ती है। और सड़कें द्विदिश हैं। हमारे पास संख्याओं की एक अन्य सूची भी है जिसे N आकार की जनसंख्या कहा जाता है, जहाँ जनसंख्या [i] i-वें शहर की जनसंख्या का प्रतिनिधित्व करती है। हम कुछ शहरों को शहरों में अपग्रेड करने का प्रयास कर रहे हैं। लेकिन कोई भी दो शहर एक दूसरे से सटे नहीं होने चाहिए और एक कस्बे से सटे हर नोड एक शहर होना चाहिए (हर सड़क एक शहर और एक शहर को जोड़ती है)। इसलिए हमें सभी शहरों की अधिकतम संभव आबादी का पता लगाना होगा।

इसलिए, यदि इनपुट स्रोत की तरह है =[2, 2, 1, 1] डेस्ट =[1, 3, 4, 0] जनसंख्या =[6, 8, 4, 3, 5], तो आउटपुट 15 होगा, जैसा कि हम 6 + 4 + 5 =15 की जनसंख्या प्राप्त करने के लिए शहरों 0, 2, और 4 को अपग्रेड कर सकते हैं।

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

  • adj :=स्रोत और नियति का उपयोग करके ग्राफ़ की आसन्न सूची बनाएं
  • एक फ़ंक्शन को परिभाषित करें dfs() । इसमें x लगेगा, चुनें
  • यदि x दिखाई देता है, तो
    • वापसी 0
  • x को देखा के रूप में चिह्नित करें
  • उत्तर:=0
  • अगर चुनना सही है, तो
    • उत्तर:=उत्तर + जनसंख्या[x]
  • adj[x] में प्रत्येक पड़ोसी के लिए, करें
    • Ans :=ans + dfs(पड़ोसी, पसंद का विलोम)
  • वापसी उत्तर
  • मुख्य विधि से निम्न कार्य करें:
  • x :=dfs(0, True)
  • अधिकतम x लौटाएं और ((जनसंख्या का योग) - x)

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

उदाहरण

from collections import defaultdict
class Solution:
   def solve(self, source, dest, population):
      adj = defaultdict(list)
      for a, b in zip(source, dest):
         adj[a].append(b)
         adj[b].append(a)

      seen = set()

      def dfs(x, choose):
         if x in seen:
            return 0
         seen.add(x)
         ans = 0
         if choose:
            ans += population[x]
         for neighbor in adj[x]:
            ans += dfs(neighbor, not choose)
         return ans

      x = dfs(0, True)
      return max(x, sum(population) - x)
     
ob = Solution()
source = [2, 2, 1, 1]
dest = [1, 3, 4, 0]
population = [6, 8, 4, 3, 5]
print(ob.solve(source, dest, population))

इनपुट

[2, 2, 1, 1], [1, 3, 4, 0], [6, 8, 4, 3, 5]

आउटपुट

15

  1. पायथन में सभी संभावित वैध पथों से अधिकतम अंक खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास दो सरणियाँ हैं nums1 और nums2। एक वैध पथ निम्नानुसार परिभाषित किया गया है - पार करने के लिए nums1 या nums2 चुनें (इंडेक्स-0 से)। सरणी को बाएँ से दाएँ पार करें। अब, यदि हम nums1 और nums2 में मौजूद किसी भी मान से आगे बढ़ रहे हैं तो हम पथ को अन्य सरणी में बदल सकते हैं। य

  1. पायथन में एक बाइनरी ट्री की अधिकतम चौड़ाई खोजने का कार्यक्रम

    मान लीजिए हमारे पास एक बाइनरी ट्री है, हमें ट्री में किसी भी स्तर की अधिकतम चौड़ाई ज्ञात करनी है। यहां एक स्तर की चौड़ाई उन नोड्स की संख्या है जो सबसे बाएं नोड और सबसे दाएं नोड के बीच हो सकते हैं। तो, अगर इनपुट . जैसा है तो आउटपुट 2 . होगा इसे हल करने के लिए, हम इन चरणों का पालन करेंगे- न्य

  1. अधिकतम तीन नंबर खोजने के लिए पायथन प्रोग्राम

    इस ट्यूटोरियल में, हम एक प्रोग्राम लिखने जा रहे हैं जो तीन अंकों से अधिकतम राशि का पता लगाता है। हमारे पास तीन संख्याएँ होंगी, और हमारा लक्ष्य उन तीन संख्याओं में से अधिकतम संख्या ज्ञात करना है। आइए बेहतर समझ के लिए कुछ नमूना परीक्षण मामलों को देखें। Input: a, b, c = 2, 34, 4 Output: 34 Input: a