
这道题的题意很简单,就是一个有n个节点的完全图,图中任意两个节点i,j间有一个权值c(i,j),找出三个节点,i,j,k使得c(i, j)+c(j, k)+c(i, k)最大。
这个题的数据不大,所以直接用三个for循环就行
题目样例一似乎有问题
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
int mp[333][333];
int t, n, u, v,weight;
cin >> t;
while (t--)
{
memset(mp, 0, sizeof(mp));
cin >> n;
int k = n * (n - 1) / 2;//因为为完全图
for (int i = 0; i < k; i++)
{
cin >> u >> v >> weight;
mp[u][v] = mp[v][u] = weight;
}
int Max = 0;
//三个循环找最大值
for (int i = 1; i <= n - 2; i++)
{
for (int j = i + 1; j <= n - 1; j++)
{
for (int x = j + 1; x <= n; x++)
{
int a = mp[i][j] + mp[i][x] + mp[x][j];
if (a > Max)
{
Max = a;
}
}
}
}
cout << Max << endl;
}
}
本文介绍了一个关于完全图的算法问题,目标是在给定的完全图中找到三个节点形成的三角形,使其边权总和最大。通过使用三个嵌套循环遍历所有可能的节点组合,该算法在数据规模适中的情况下能够有效地解决问题。
172万+

被折叠的 条评论
为什么被折叠?



