编程介的小学生 2019-01-07 19:34 采纳率: 20.5%
浏览 299
已采纳

计算数组合并的最小组合方式,采用C语言技术计算的,怎么做

Problem Description
There are N number,they are respectively from 1 to N.

for a set of numbers, we set a problem as flow:

we assume that the initial position of each number is the corresponding positon on number axis.

Then what we have to do is to make the minimum and maximum number of meet in minimum time.

We can operate these numbers as flow:

Each operation, we can select two adjacent numbers on the number axis and exchange them.multiple operations can be performed at the same time.

the time it spend is the distance between two position.

When the minimum and maximum number went to the adjacent positions,the time of they meet is distance/2.

Here is an example:

1..4......11....16..19

We want 1 and 19 meet.

Let 1,4 and 16,19 exchange, they can be performed at the same time and end at the same time.It spend 3 units time,and becomes the following:

4..1......11....19..16

Then there are two Plan:

A Plan:

let 1 and 11 exchange with 7 units time first.And it becomes the following:

4..11......1....19..16

Then exchange 1 and 19 with 2.5 units time.

the total times is:3+7+2.5=12.5

Plan B:

Let 11 and 19 exchange with 5 units time first.it becomes the following:

4..1......19....11..16

let 1 and 19 exchanged with a time of 3.5 units.

total:3+5+3.5=11.5

Clearly, B Plan work better.

Now everyone seems to understand the meaning of the problem.

So the question now is like the following

at the beginning, there are N sets, the i-th set contains and contains only i.

Then N-1 operations flow:

Merge two set.

And you should calculate the minimum time of making the biggest and smallest number meet after merging in this set.

Input
The first line contains a number T(T<=5), indicating T cases of data.

for each case of data:

The first line contains a number N.

Then N-1 lines flow,

each line contains two different integers u, v.

they Represents we merge two set where u and v are.

we promise that u and v are not at the same set.

  • 1≤N≤300000

Output
for each case of data:
for each line, output the minimum time after merging, accurated to 0.1.

Sample Input
1
3
1 2
1 3

Sample Output
0.5
1.5

  • 写回答

1条回答 默认 最新

报告相同问题?

悬赏问题

  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?