C++ 实现无向图中三个顶点最大值计算

给定一个有 n 个顶点 m 条边的简单无向图,第 i 个顶点的点权是 vi。需要找到三个相异的顶点 (a, b, c),满足 ab 相邻,bc 相邻。求 va × vc - vb 的最大值。保证有解。

C++ 代码

以下是使用 C++ 语言编写的代码,根据给定的简单无向图,找到满足条件的三个相异的顶点,并计算最大值:

#include <iostream>
#include <vector>

int main() {
    int n, m;
    std::cin >> n >> m;

    std::vector<int> vertexWeights(n);
    for (int i = 0; i < n; i++) {
        std::cin >> vertexWeights[i];
    }

    std::vector<std::vector<int>> adjacencyList(n);
    for (int i = 0; i < m; i++) {
        int u, v;
        std::cin >> u >> v;
        adjacencyList[u - 1].push_back(v - 1);
        adjacencyList[v - 1].push_back(u - 1);
    }

    long long maxResult = 0;

    for (int a = 0; a < n; a++) {
        for (int b : adjacencyList[a]) {
            for (int c : adjacencyList[b]) {
                if (c == a) {
                    continue;
                }
                long long result = 1LL * vertexWeights[a] * vertexWeights[c] - vertexWeights[b];
                maxResult = std::max(maxResult, result);
            }
        }
    }

    std::cout << maxResult << std::endl;

    return 0;
}

此代码假设输入是有效的,并且没有对输入进行错误检查。在实际应用中,你可能需要添加错误处理和边界情况的检查。希望这可以帮到你!

C++ 实现无向图中三个顶点最大值计算

原文地址: https://www.cveoy.top/t/topic/ZqQ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录