UVa 140 Bandwidth (枚举全排列&剪枝搜索)

从BAM到bigWig:用UCSC工具链完成测序数据可视化的完整流程 本文详细介绍了从BAM文件到bigWig格式的基因组数据可视化完整流程,涵盖UCSC工具链配置、文件格式转换、参数优化及常见问题解决方案。通过实战指南帮助研究人员高效完成测序数据可视化,特别适合ChIP-seq和RNA-seq数据分析。 阅读详情

140 - Bandwidth

Time limit: 3.000 seconds 

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=108&page=show_problem&problem=76

Given a graph (V,E) where V is a set of nodes and E is a set of arcs in VxV, and anordering on the elements in V, then thebandwidth of a nodev is defined as the maximum distance in the ordering betweenv and any node to which it is connected in the graph. The bandwidth of the ordering is then defined as the maximum of the individual bandwidths. For example, consider the following graph:

picture25

This can be ordered in many ways, two of which are illustrated below:

picture47

For these orderings, the bandwidths of the nodes (in order) are 6, 6, 1, 4, 1, 1, 6, 6 giving an ordering bandwidth of 6, and 5, 3, 1, 4, 3, 5, 1, 4 giving an ordering bandwidth of 5.

Write a program that will find the ordering of a graph that minimises the bandwidth.

Input

Input will consist of a series of graphs. Each graph will appear on a line by itself. The entire file will be terminated by a line consisting of a single#. For each graph, the input will consist of a series of records separated by `;'. Each record will consist of a node name (a single upper case character in the the range `A' to `Z'), followed by a `:' and at least one of its neighbours. The graph will contain no more than 8 nodes.

Output

Output will consist of one line for each graph, listing the ordering of the nodes followed by an arrow (->) and the bandwidth for that ordering. All items must be separated from their neighbours by exactly one space. If more than one ordering produces the same bandwidth, then choose the smallest in lexicographic ordering, that is the one that would appear first in an alphabetic listing.

Sample input

A:FB;B:GC;D:GC;F:AGH;E:HD
#

Sample output

A B C F G D H E -> 3


枚举全排列,遇到nowmin > _min的情况就剪掉。


完整代码:

/*0.016s*/

#include<cstdio>
#include<cstring>
#include<cctype>
#include<algorithm>
using namespace std;

char s[100];
int permu[30], ans[30], _min, c;
bool m[30][30], node[30];

void analyze(char *s)///初始化
{
	int state = 0;
	for (int i = 0; s[i]; ++i)
	{
		if (isalpha(s[i]))
		{
			if (!node[s[i] & 31])
			{
				node[s[i] & 31] = true;
				++c;
			}
			if (!state)
				state = s[i] & 31;
			else
			{
				m[state][s[i] & 31] = 1;
				m[s[i] & 31][state] = 1;
			}
		}
		else if (s[i] == ';' && state)
			state = 0;
	}
}

void dfs(int cur, int max)
{
    int i,j;
	if (cur == c) ///fin
	{
		if (_min > max)
		{
			for (int i = 0; i < c; ++i)
				ans[i] = permu[i];
			_min = max;
		}
		return;
	}
	for (i = 1; i <= 26; ++i)
		if (node[i])
		{
			for (j = cur - max - 1; j >= 0; --j)
				if (m[i][permu[j]])
					max = cur - j;
			if (max > _min) return;///剪枝
			node[i] = false;
			permu[cur] = i;
			dfs(cur + 1, max);
			node[i] = true;
		}
}

int main()
{
	while (gets(s), s[0] != '#')
	{
		memset(node, 0, sizeof(node));
		memset(m, 0, sizeof(m));
		c = 0;
		analyze(s);
		_min = -1u >> 1;
		for (int i = 1; i <= 26; ++i)
			if (node[i])
			{
				node[i] = false;///表示该值已在全排列中
				permu[0] = i;
				dfs(1, 0);
				node[i] = true;
			}
		for (int i = 0; i < c; ++i)
			printf("%c ", ans[i] + 'A' - 1);
		printf("-> %d\n", _min);
	}
	return 0;
}

YOLOv8融合HAttention:激活更多像素的注意力机制科研实践指南 HAttention通过层级化像素激活与融合的设计,为YOLOv8的像素级特征利用能力带来了质的飞跃。从原理理解到代码实现,再到集成调优,每一步都是科研中“解决像素信息遗漏难题”的具体实践。如果你在实验中发现某类细节或大尺度目标的检测仍有不足,可以尝试结合数据增强(如随机裁剪、多尺度训练)来强化模型对像素特征的学习能力。科研的价值在于不断挖掘技术的潜力,希望这份指南能真正帮你在目标检测的像素级特征利用领域找到新的突破点,祝你在科研探索中持续收获创新与成长。 阅读详情

相关推荐

手把手教你调试eDP接口:Main Link信号异常、AUXCH通信失败怎么办?

本文提供了一份详尽的eDP接口调试实战指南,重点解决Main Link信号异常与AUXCH通信失败两大核心难题。文章系统介绍了从工具准备、信号完整性分析(眼图、抖动测量)到AUXCH协议解码、HPD信号检查的完整排查流程,并分享了链路训练诊断与常见避坑技巧,帮助硬件工程师高效定位并解决显示问题。

Jerry的专栏 831

UVA 140 带宽 Bandwidth (暴力枚举+剪枝)

解题思路:本题使用了STL中的next_permutation()函数(位于algorithm中)列举排列。先记录目前已经找到的最小带宽min_width,如果发现已经有某两个结点的距离大于或等于min_width,再怎么扩展也不可能比当前解更有,故应“剪”掉,即剪枝 #include #include #include #include #include using namespace st

持之以恒 476

从零开始的计网学习——物理层

计算机网络对于IT人不论是就业还是升学都是核心的一门课程,一起从零开始,学习计算机网络!

Nimrod__的博客 2万+

例题7-6 UVA140 Bandwidth(43行AC代码)

紫书刷题进行中,题解系列【GitHub|优快云】 例题7-6 UVA140 Bandwidth(43行AC代码) 题目大意 给定一个无向图,将节点排序后,定义顶点i的带宽b(i)为顶点i与相邻结点在排列中的最大距离,而一个排序的带宽为b(i)的最大值。现要求出带宽最小的排列,存在多解则输出字典序最小者 思路分析 本质是N个顶点的全排列问题,为了解决字典序问题,将顶点先升序排列。计算过程中,仅遇到...

努力做个书呆儿 310

手把手教你实现阿克曼ROS小车的运动控制

本文详细介绍了如何从零开始实现阿克曼ROS小车的运动控制。内容涵盖硬件搭建、STM32底层PID速度与舵机控制、ROS层阿克曼运动学模型解析,以及上下位机通信协议设计。通过手把手的代码示例和调试步骤,帮助机器人爱好者与开发者掌握将高级速度指令转化为小车具体动作的全流程,实现流畅的阿克曼转向控制。

weixin_29193259的博客 199

C# 进程间 双内存共享 高帧率图像传输

演示了两个进程之间通过 双内存共享 的方式, 来实时处理图像,并以高帧率(40~60FPS)传输的基本示例。 进程间内存共享的优点:高性能、低延迟、资源效率高、简单可靠。 适用场景:实时图像处理、大数据传输、多进程协作、实时监控系统,等等。

qianqiansd 1996

UVa 140 Bandwidth 带宽

“剪枝” --本题的优化方案 可以记录下目前已经找到的最小带宽k。如果发现已经有某两个结点的距离大于或等于k,再怎么扩展也不可能比当前解更优,应当强制把它“剪”掉,就像园丁在花园里为树修剪枝叶一样,也可以为解答树“剪枝(prune)”。 除此之外,还可以剪掉更多的枝叶。如果在搜索到结点u时,u结点还有m个相邻点没有确定位置,那么对于结点u来说,最理想的情况就是这m个结点紧跟在u后面,这样的结点带...

lins的博客 216

七段数码管动态显示技术:分时复用与使能端优化

本文深入解析了七段数码管动态显示技术的核心原理,重点阐述了分时复用与使能端优化如何协同工作。通过利用人眼视觉暂留效应,分时复用技术以一套数据线驱动多个数码管,而合理的使能端控制则是消除鬼影、保证亮度均匀的关键。文章提供了从硬件基础到Verilog代码实战的完整指南,帮助开发者实现稳定高效的动态显示系统。

lilh34434的博客 212

UVa140- Bandwidth

UVa140- Bandwidth   题意:给定n(n   分析:刚开始做的时候,以为是最多26个节点,26的阶乘该是多大了…..然后以搜索剪枝的框架的方式写出来了,最后发现最多8个..,就算直接枚举效率也足够高,而且直接枚举肯定还会更简单,想必可以用next_permutation函数。 如果用搜索剪枝的方式的话,那么便考虑到优化的问题,如何剪枝呢?最优性剪枝就可以了,如果当前的最小

我的ACM,我的梦!!! 1278

时间序列聚类在股票市场分析中的实践与优化

时间序列聚类是一种面向动态行为建模的无监督学习方法,其核心在于通过语义感知的距离度量(如DTW)捕捉价格形态的相位弹性与结构相似性,而非依赖静态数值或标签驱动。相比K-Means等传统算法,它能有效缓解金融时序中普遍存在的噪声敏感、对齐失效与形态失真问题,从而提升聚类结果的市场可解释性与策略鲁棒性。该技术已广泛应用于市场状态识别、行业行为分群、异常交易监测等场景,并成为构建可验证量化分析框架的关键预处理层。本文聚焦A股真实行情数据,详解从原始OHLCV到可聚类时间序列的完整链路,涵盖DTW距离计算、层次聚类

weixin_34220179的博客 830

深度学习-161-Dify工具之对比使用工作流和聊天流生成图表可视化的html文件

分别使用聊天流和工作流进行数据分析结果的可视化,生成html文件。聊天流可以配置带记忆,这样就可以多次交互优化结果。

qq_20466211的博客 1709

带宽(Bandwidth, UVa 140)

给出一个n(n≤8)个结点的图G和一个结点的排列,定义结点i的带宽b(i)为i和相邻结点在排列中的最远距离,而所有b(i)的最大值就是整个图的带宽。给定图G,求出让带宽最小的结点排列,如图7-7所示。 下面两个排列的带宽分别为6和5。具体来说,图7-8(a)中各个结点的带宽分别为6, 6,1, 4, 1, 1, 6, 6,图7-8(b)中各个结点的带宽分别为5, 3, 1, ...

Nicolas的博客 1165

ESP32学习笔记03-日志打印

日志分为5个等级。

Car12 1415

UVa140 Bandwidth(带宽)

回溯法的应用+剪枝:Uva140-带宽

明朗晨光的专栏 359

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

UVa 140 Bandwidth(DFS 回溯 剪枝)

题意  有一个无向图  对于其所有顶点的一个排列 称一顶点与所有与其有边的其它顶点在排列中下标差的最大值为这个顶点的带宽   而所有顶点带宽的最大值为这个排列的带宽   求这个图带宽最小的排列 枚举排列  ans记录当前找到的最小带宽  枚举过程中一旦出现带宽大于ans的也就不用再扩展了  这样枚举完就得到了答案 #include #include using namespace std; c

Deng's site \# 1137

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Bandwidth UVA - 140 (枚举排列:对解答树剪枝)

题目链接 题目大意: 给出一个n(n≤8)个结点的图G和一个结点的排列,定义结点i的带宽b(i)为i和相邻结点 在排列中的最远距离,而所有b(i)的最大值就是整个图的带宽。给定图G,求出让带宽最小 的结点排列。 分析: 可以记录下目前已经找到的最小带宽k。如果发现已经有某两个结点的距离大于或等 于k,再怎么扩展也不可能比当前解更优,应当强制把它“剪”掉。 #include &lt;bi...

qq_43185391的博客 252

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

UVa 140 - Bandwidth(全排列+回溯剪枝)

给出结点和结点之间的连接,求带宽最小的排列。带宽就是在排列中每一个点到其他点最大距离的最大值。 首先枚举全排列,使用algorithm中的next_permutation函数。 对于每个排列求带宽比较,有一个点的带宽大于当前最小值,就剪掉。 这道题不用函数,手动构造能剪更多枝,可以更加省时,但代码可能会长点。

wcr1996的专栏 1805

例题7-6 UVa140 Bandwidth(枚举+剪枝)

题意: 看白书 要点: 就是全排列问题加上一些剪枝,输入存储有些麻烦。注意如果有多个最小的排列,输出字典序最小的那个 #include #include #include #include #include #include using namespace std; int num, ahl[30], map[30][30]; int save[10], node[10

SeasonJoe的博客 552

UVA - 140 Bandwidth

题意: 给出一个n(n&amp;lt;=8)个结点的图G和一个结点的排列,定义结点i的带宽b(i)为i和相邻结点在排序中的最远距离,而所有b(i)的最大值就是整个图的带宽。给定图G,求出让带宽最小的结点排序。 输入: A:FB;B:GC;D:GC;F:AGH;E:HD # 输出: A B C F G D H E -&amp;gt; 3 思路: 如果直接枚举全序列的话,效率不高。所以需要剪枝。 (...

zamaochick的博客 254

UVA 140_Bandwidth

题意: 定义一个结点的带宽是其距离所有相连结点的最远距离,一个图的带宽是图中所有结点带宽的最小值。给出一个图中各个结点的相邻情况,要求写出一个结点的排列,使得其所构成的图带宽最小。 分析: 枚举全排列+剪枝 注意: 输入时的处理 虽然结点个数不超过8个但是结点可以是26个字母中的任意一个! 孤立结点的情况 代码: #include&lt;io...

An55511的博客 107

UVA-140 Bandwidth (枚举排列 next_permutation)

UVA-140 Bandwidth (枚举排列: next_permutation) Given a graph (V, E) where V is a set of nodes and E is a set of arcs in V ×V , and an ordering on the elements in V , then the bandwidth of a node v is defi...

weixin_43406404的博客 191

UVa140 - Bandwidth

/*UVa 140 140 - Bandwidth ---数据量比较小,可以直接用next_permutation来枚举全排列,依次计算每一个排序的b(i),求出最小即可 ---在枚举时,注意到在计算某一个排列的带宽过程中,如果发现某两个节点的带宽大于当前总的最小带宽k ---则可以直接剪掉。 */ #define _CRT_SECURE_NO_DEPRECATE #include...

weixin_30600197的博客 133

uva 140 Bandwidth(暴搜+剪枝)

原题链接: UVA  140 参考刘汝佳书《算法竞赛入门经典(第二版)》P195. 我是搬运工。 枚举所有可能序列。 找到最终解。 剪枝:当目前最小带宽小于等于正在判断的两个结点距离时,应当剪掉。 注意题目的中 ‘#’  代码如下: #include #include #include #

sunshine_YG的专栏 490

UVA-140 Bandwidth 带宽

题目链接:https://vjudge.net/problem/UVA-140 题意:给出一个n(n 举例说明: 如图,最右边是无向图,下面两幅图都遵循这个连接方式,下面两幅图中,左图各结点的带宽分别是6,6,1,4,1,1,6,6。右图各结点带宽分别为5,3,1,4,3,5,1,4。 分析:n比较小,暴力求解,利用STL中next_permutation函数枚举全排列,逐个计算出

Sunshine_victory的博客 582

Bandwidth UVA - 140

暴力枚举 刘汝佳书中说了半天如何剪枝,但是他的代码仓库中依旧是暴力枚举 代码参考刘汝佳的代码仓库 #include&amp;lt;iostream&amp;gt; #include&amp;lt;cmath&amp;gt; #include&amp;lt;cstdio&amp;gt; #include&amp;lt;algorithm&amp;gt; #include&amp;lt;cstring&amp;gt; #include&amp;lt;string&amp;gt; #inc...

∑bit 174

UVA-140-Bandwidth-最优性剪枝与回溯

UVA-140-Bandwidth参考题解,参考算法为回溯与剪枝,本文简要介绍在回溯中如何进行最优性剪枝。

我是懒狗━┳━ ━┳━ 546
上一篇: UVa 10924 Prime Words (素数)
下一篇: UVa 331 Mapping the Swaps (DFS)
synapse7
博客等级 码龄14年 432粉丝 701原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值