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

C++ प्रोग्राम गेहूँ बेचने से प्राप्त होने वाले लाभ की अधिकतम राशि का पता लगाने के लिए

मान लीजिए, ऐसे कई शहर हैं जो m सड़कों से जुड़े हैं। सड़कें यूनिडायरेक्शनल हैं, सड़कें केवल स्रोत से गंतव्य तक जा सकती हैं, विपरीत नहीं। सड़कों को सरणी 'सड़कों' में प्रारूप {स्रोत, गंतव्य} में दिया गया है। अब शहरों में गेहूं अलग-अलग दामों पर बिकता है। शहरों में गेहूं की कीमत एक सरणी 'कीमत' में दी जाती है, जहां i-th मान i-th शहर में गेहूं की कीमत है। अब, यात्री किसी भी शहर से गेहूं खरीद सकता है और किसी भी शहर में पहुंच सकता है (यदि यह अनुमति है) और इसे बेच सकता है। हमें यह पता लगाना है कि गेहूँ का व्यापार करके यात्री को अधिकतम कितना लाभ प्राप्त हो सकता है।

इसलिए, यदि इनपुट n =5, m =3, मूल्य ={4, 6, 7, 8, 5}, सड़कें ={{1, 2}, {2, 3}, {2, 4}, {4, 5}}, तो आउटपुट 4 होगा।

यदि यात्री पहले शहर में गेहूं खरीदता है और चौथे शहर में बेचता है, तो प्राप्त लाभ की कुल राशि 4 है।

कदम

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

Define one 2D array graph of size nxn.
for initialize i := 0, when i < m, update (increase i by 1), do:
   x := first value of roads[i]
   y := second value of roads[i]
   decrease x, y by 1
   insert y at the end of graph[x]
Define an array tp of size n initialized with value negative infinity.
for initialize i := 0, when i < n, update (increase i by 1), do:
   for each value u in graph[i], do:
      tp[u] := minimum of ({tp[u], tp[i], price[i]})
res := negative infinity
for initialize i := 0, when i < n, update (increase i by 1), do:
   res := maximum of (res and price[i] - tp[i])
return res

उदाहरण

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

#include <bits/stdc++.h>
using namespace std;

int solve(int n, int m, vector<int> price, vector<pair<int, int>>
roads){
   vector<vector<int>> graph(n);
   for(int i = 0; i < m; i++){
      int x, y;
      x = roads[i].first;
      y = roads[i].second;
      x--, y--;
      graph[x].push_back(y);
   }
   vector<int> tp(n, int(INFINITY));
   for(int i = 0; i < n; i++){
      for(int u : graph[i]){
         tp[u] = min({tp[u], tp[i], price[i]});
      }
   }
   int res = -int(INFINITY);
   for(int i = 0; i < n; i++){
      res = max(res, price[i] - tp[i]);
   }
   return res;
}
int main() {
   int n = 5, m = 3;
   vector <int> price = {4, 6, 7, 8, 5};
   vector<pair<int, int>> roads = {{1, 2}, {2, 3}, {2, 4}, {4, 5}};
   cout<< solve(n, m, price, roads);
   return 0;
}

इनपुट

5, 3, {4, 6, 7, 8, 5}, {{1, 2}, {2, 3}, {2, 4}, {4, 5}}

आउटपुट

4

  1. सी ++ प्रोग्राम यह पता लगाने के लिए कि क्या किसी दिए गए मैट्रिक्स से पैलिंड्रोमिक मैट्रिक्स बनाया जा सकता है

    मान लीजिए, हमें आयाम h x w के साथ एक मैट्रिक्स दिया गया है। मैट्रिक्स में अंग्रेजी अक्षर हैं। हमें एक और मैट्रिक्स बनाना होगा जिसमें पैलिंड्रोमिक रो और कॉलम होंगे, यानी प्रत्येक पंक्ति और कॉलम पैलिंड्रोम होंगे। ऐसा करने के लिए, दिए गए मैट्रिक्स से पंक्तियों और स्तंभों की कोई भी व्यवस्था की जा सकती ह

  1. C++ प्रोग्राम ग्राफ में सुपर वर्टिस का पता लगाने के लिए

    मान लीजिए, हमें एक ग्राफ दिया गया है जिसमें n शीर्ष हैं। कोने 1 से n तक गिने जाते हैं, और वे सरणी किनारों में दिए गए किनारों से जुड़े होते हैं। प्रत्येक शीर्ष का 1 से n तक की संख्या के भीतर x मान होता है जो कि सरणी मान में दिया जाता है। अब, हमें ग्राफ से अति शीर्षों का पता लगाना है। एक शीर्ष i को सु

  1. C++ प्रोग्राम स्कोर की अधिकतम राशि का पता लगाने के लिए जिसे ग्राफ़ से घटाया जा सकता है

    मान लीजिए, एक भारित, अप्रत्यक्ष ग्राफ है जिसमें n कोने और m किनारे हैं। ग्राफ़ के स्कोर को ग्राफ़ में सभी किनारों के वज़न के योग के रूप में परिभाषित किया गया है। किनारे के वजन नकारात्मक हो सकते हैं, और यदि उन्हें हटा दिया जाता है तो ग्राफ का स्कोर बढ़ जाता है। हमें क्या करना है, हमें ग्राफ को कनेक्ट