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

न्यूनतम संबद्ध ग्राफ का अधिकतम योग ज्ञात करने का C++ प्रोग्राम


मान लीजिए एक न्यूनतम संबद्ध ग्राफ दिया गया है। इसका अर्थ है कि किसी भी एज को हटाने से ग्राफ असंबद्ध हो जाएगा। ग्राफ में n वर्टेक्स हैं और एज 'edges' सरणी में दी गई हैं। एक सरणी 'vertexValues' भी दी गई है जिसमें n पूर्णांक मान हैं।

अब हम निम्न करते हैं:

  • प्रत्येक वर्टेक्स पर एक धनात्मक पूर्णांक लिखते हैं और फिर स्कोर की गणना करने का प्रयास करते हैं।
  • दो वर्टेक्स को जोड़ने वाली एज होती है, हम दोनों वर्टेक्स के मानों में से छोटे मान को एज पर रखते हैं।
  • सभी एज मानों को जोड़कर स्कोर की गणना करते हैं।

हमें वर्टेक्स पर मान रखकर प्राप्त किए जा सकने वाले अधिकतम मान की गणना करनी है। हमें अधिकतम कुल मान और वर्टेक्स पर लिखे जाने वाले मान प्रिंट करने हैं।

उदाहरण के लिए, यदि इनपुट है n = 6, edges = {{1, 2}, {2, 3}, {2, 4}, {4, 5}, {3, 6}}, vertexValues = {1, 2, 3, 4, 5, 6}, तो आउटपुट 15, 3 1 2 4 5 6 होगा, क्योंकि हम वर्टेक्स पर मान 0 से n-1 तक दिए गए तरीके 3 1 2 4 5 6 में रख सकते हैं।

चरण

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

N := 100
आकार N के सरणी seq, res परिभाषित करें
आकार N का सरणी tp परिभाषित करें
ans := 0
एक फंक्शन dfs() परिभाषित करें जो p, q लेता है:
    res[p] := seq[c]
    यदि p != 0, तो:
        ans := ans + seq[c]
    c घटाएँ
    tp[p] में प्रत्येक मान x के लिए:
        यदि x != q, तो:
            dfs(x, p)
i := 0 से n-2 तक:
    tmp := edges[i] का पहला मान - 1
    temp := edges[i] का दूसरा मान - 1
    temp को tp[tmp] के अंत में डालें
    tmp को tp[temp] के अंत में डालें
i := 0 से n-1 तक:
    seq[i] := vertexValues[i]
c := n - 1
seq सरणी को सॉर्ट करें
dfs(0, 0)
ans प्रिंट करें
i := n-1 से 0 तक घटाते हुए:
    res[i] प्रिंट करें

उदाहरण

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

#include <bits/stdc++.h> using namespace std; const int INF = 1e9; #define N 100 int seq[N], res[N]; vector<int> tp[N]; int ans = 0, c; void dfs(int p, int q) {    res[p] = seq[c];    if(p != 0)       ans += seq[c];    c--;    for(auto x : tp[p]) {       if(x != q)          dfs(x, p);    } } void solve(int n, vector<pair<int,int>> edges, int vertexValues[]){    for(int i = 0; i + 1 < n; i++) {       int tmp = edges[i].first - 1;       int temp = edges[i].second - 1;       tp[tmp].push_back(temp);       tp[temp].push_back(tmp);    }    for(int i = 0; i < n; i++)     seq[i] = vertexValues[i];    c = n - 1;    sort(seq, seq + n);    dfs(0, 0);    cout << ans << endl;    for(int i = n - 1; i >= 0; i--)     cout << res[i] << " ";    cout << endl; } int main() {    int n = 6;    vector<pair<int,int>> edges = {{1, 2}, {2, 3}, {2, 4}, {4, 5},{3, 6}};    int vertexValues[] = {1, 2, 3, 4, 5, 6};    solve(n, edges, vertexValues);    return 0; }

इनपुट

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

आउटपुट

15 3 1 2 4 5 6
  1. ग्राफ में सुपर वर्टेक्स खोजने का C++ प्रोग्राम ग्राफ में सुपर वर्टेक्स खोजने का C++ प्रोग्राम

    मान लीजिए n वर्टेक्स वाला एक ग्राफ दिया गया है। वर्टेक्स 1 से n तक संख्याबद्ध हैं और edges सरणी में दी गई एज्स से जुड़े हैं। प्रत्येक वर्टेक्स का एक x मान है जो 1 से n के बीच होता है, यह values सरणी में दिया गया है। हमें ग्राफ में सुपर वर्टेक्स खोजने हैं। एक वर्टेक्स i को सुपर वर्टेक्स कहा जाता है

  1. दिए गए ग्राफ में ब्रिज एज की संख्या ज्ञात करने का C++ प्रोग्राम दिए गए ग्राफ में ब्रिज एज की संख्या ज्ञात करने का C++ प्रोग्राम

    मान लीजिए n वर्टेक्स और m एज वाला एक अनभारित, निदेश रहित ग्राफ दिया गया है। ग्राफ में एक ब्रिज एज वह एज है जिसे हटाने से ग्राफ असंबद्ध हो जाता है। हमें दिए गए ग्राफ में ऐसी एज की संख्या ज्ञात करनी है। ग्राफ में समानांतर एज या सेल्फ-लूप नहीं हैं। उदाहरण के लिए, यदि इनपुट है n = 5, m = 6, edges = {{1

  1. ग्राफ से घटाए जा सकने वाले अधिकतम स्कोर की मात्रा ज्ञात करने का C++ प्रोग्राम ग्राफ से घटाए जा सकने वाले अधिकतम स्कोर की मात्रा ज्ञात करने का C++ प्रोग्राम

    मान लीजिए n वर्टेक्स और m एज वाला एक भारित, निदेश रहित ग्राफ दिया गया है। ग्राफ का स्कोर ग्राफ में सभी एज भारों का योग है। एज भार ऋणात्मक हो सकते हैं, और यदि उन्हें हटा दिया जाए तो ग्राफ का स्कोर बढ़ जाता है। हमें ग्राफ को संबद्ध रखते हुए एज हटाकर ग्राफ के स्कोर को न्यूनतम करना है। हमें घटाए जा सकन