有一个州(地区)是以节点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。
答案 0 :(得分:0)
首先,当您查看Toll
功能代码和示例输入时,您会看到此功能只计算路径:
因为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。希望这会有所帮助。 :)