最佳边缘权重

时间:2018-01-06 10:25:15

标签: java algorithm data-structures

有一个州(地区)是以节点1为根的树。所有城市(编号从1到N + 1) 在这种状态下通过双向道路连接。你必须在每条道路上增加通行税。有N条道路连接州的城市。您必须在道路上分配通行税,以便最大化Toll所述的功能:

for(i=1;i<=number of cities;i++)
{
    for(j=i+1;j<=number of cities;j++)
    {
        toll+=(toll required to pay to travel from i to j)
     } 
}

您必须最大化通行费税。通过给定阵列A的通行税分配道路(使用每个值一次)。找到获得的最大费用。

输入格式:

第一行包含

  

N和一个整数,其值始终为2.

然后,

  

N条道路跟随包含2个整数u和v,表示城市   道路之间。

下一行包含N个空格分隔值,表示数组A的元素。

输出格式

打印可以获得的最大费用。

输入约束

1≤N≤2∗10^5

1≤A[i]≤1000
1≤u,v≤N+1

示例输入

2 2

1 3

2 3

5 7

示例输出

24

解释 将5分配给边(1-3),将7分配给边(2-3)。这导致最高通行税为24。

2 个答案:

答案 0 :(得分:0)

首先,当您查看Toll功能代码和示例输入时,您会看到此功能只计算路径:

  • 从1到3
  • 从2到3
  • 但不是3比1
  • 而不是3到2,

因为j总是超过i,所以这导致我们24是不正确的答案(或者你的Toll}函数不正确。

其次,根据任务(但我认为它只是描述错误),答案总是等于数组A中元素的总和,因为任务听起来像:将元素放到对称矩阵然后计算总和在对角线上方(或下方),但它将是阵列A中的所有相同元素。

答案 1 :(得分:0)

您提出的问题属于图表。

从1开始给出三个城市 - &gt; 3.如果您从A []中随机分配值并在收费函数中使用它,您将得到以下输出:

假设你分配了5到边缘1-3,7到边缘2-3, 图表就像1 ------ 3 ------ 2

然后根据收费功能,您将获得以下路线:

1-2 === 7 + 5 = 12

1-3 === 5

2-3 === 7

因此,总收费将是= 12 + 5 + 7 = 24。

因此,您需要先构建图形。然后随机分配通行费并找到所有可能组合的通行费。 要不然, 您可以使用Graph的最小生成树的概念。你只需要反过来使用kruskal或Prim的算法来找到一个收费最高的路线

PS:双向道路的含义是假设你的第一个for循环从3开始,第二个for循环从1开始,然后你也可以去3> 1,其收费与你之前使用的相同1→3。

希望这会有所帮助。 :)