分治法解信号增强装置问题
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;
}
}
各种资源传输网络的功能是将始发地的资源通过网络传输到一个或多个目的地。例如,通过石油或者天然气输送管网可以将从油田开采的石油和天然气传送给消费者。 同样,通过高压传输网络可以将发电厂生产的电力传送给用电消费者。为了使问题更具一般性,用术语信号统称网络中传输的资源 (石油,天然气,电力等等)。各种资源传输网络统称为信号传输网络。信号经信号传输网络传输时,需要消耗一定的能量,并导致传输能量的衰减(油压,气压,电压等等)。当传输能量衰减量(压降)达到某个阈值时,将导致传输故障。为了保证传输畅通,必需在传输网络的适当位置放置信号增强装置,确保传输能量的衰减量不超过其衰减量容许值。为了简化问题,假定给定的信号传输网络是以信号始发地为根的一棵树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;
}
}
相关文章推荐
- 语音信号增强学习分享
- 处理QMenu的triggered信号时遇到的一个问题
- android wifi移植statusbar信号只显示一格的问题
- 关于信号槽连接地方的一点心得,一个问题困扰了一下午才解决,纪念一下。
- 分治法:棋盘覆盖问题
- 信号处理方法的问题
- 分治法——棋盘覆盖问题
- gdb(ddd,kdevelop等)调试ZeroIce开发的应用程序,中断信号引起的问题
- 【Scikit-Learn 中文文档】分解成分中的信号(矩阵分解问题) - 无监督学习 - 用户指南 | ApacheCN
- 0003算法笔记——【分治法】分治法与二分搜索,棋盘覆盖问题
- 电信号的传输速度和光信号的传输速度(排除衰减问题)
- 学习记录-Qt信号和槽使用遇到的问题记录
- 分治法-最近对问题
- <<数字信号通信>>问题列表
- 线程互斥锁的问题(线程中使用定时器信号)
- 分治法解决快速排序问题
- SAP用户出口(exit)问题--数据源增强
- 0007算法笔记——【分治法】最接近点对问题
- SIGCHLD信号和waitpid(经典问题)
- 内核层与用户层信号异步通知问题