您的位置:首页 > 其它

分治法解信号增强装置问题

2013-10-20 16:12 183 查看
描述

各种资源传输网络的功能是将始发地的资源通过网络传输到一个或多个目的地。例如,通过石油或者天然气输送管网可以将从油田开采的石油和天然气传送给消费者。 同样,通过高压传输网络可以将发电厂生产的电力传送给用电消费者。为了使问题更具一般性,用术语信号统称网络中传输的资源 (石油,天然气,电力等等)。各种资源传输网络统称为信号传输网络。信号经信号传输网络传输时,需要消耗一定的能量,并导致传输能量的衰减(油压,气压,电压等等)。当传输能量衰减量(压降)达到某个阈值时,将导致传输故障。为了保证传输畅通,必需在传输网络的适当位置放置信号增强装置,确保传输能量的衰减量不超过其衰减量容许值。为了简化问题,假定给定的信号传输网络是以信号始发地为根的一棵树T。在树T的每一个结点处(除根结点外)可以放置一个信号增强装置。树T 的结点也代表传输网络的消费结点。信号经过树T 的结点传输到其儿子结点。树的每一边上的正权是流经该边的信号所发生的信号衰减量。信号衰减量是可加的。信号增强装置问题要求对于一个给定的信号传输网络,计算如何放置最少的信号增强装置来保证网络传输的畅通。

对于给定的带权树,编程计算放置信号增强装置最少数量。

输入
第一行有1 个正整数n,表示给定的带权树有n个顶点,编号为1,2,…,n。编号为1 的顶点是树根。接下来的n 行中,第i+1 行描述与i 个顶点相关联的边的信息。每行的第一个正整数k 表示与该顶点相关联的边数。其后2k 个数中,每2 个数表示1 条边。第一个数是与该顶点相关联的另一个顶点的编号,第二个数是边权值。文件的最后一行是正整数d,表示衰减量容许值。
输出
将编程计算出的最小信号增强装置数输出。如果无法得到满足要求的网络则输出“No Solution!”。
样例输入
4

2 2 3 3 1

2 1 3 4 2

1 1 1

1 2 2

4

样例输出
1
分析一个节点(叶子开始)是否要增设信号增强装置:

1.假设该节点所有的儿子都为最优子树(信号增强装置的个数最少)。

2.比较每个子树到该节点的信号衰减量,取最大值max

3.S=max+该节点到父节点的衰减量p

4.比较T与d : 1.S>d
增设信号增强装置

2.S<=d
不增设(贪心)。

5.返回该节点衰减量



int fun(intindex,intpar,intparc,int**
a,intn,intd,int* result)

{

if(parc>d)

return -1;

intconc=a[index][0];

if(conc==1&&index!=1)

return parc;

inti;

int max=0;

for(i=1;i<=conc;i++)

{

if(a[index][2*i-1]!=par){

int
tem=fun(a[index][2*i1],index,a[index][2*i],a,n,d,result);

if(tem==-1) return -1;

if(tem>max) max=tem;

}

}

if(max+parc>d)

{

(*result)++;

return parc;

}

else

{

return max+parc;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: