题目链接:
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 anorderingon the elements in V, then thebandwidthof a nodevis defined as the maximum distance
in the ordering betweenvand 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:
This can be ordered in many ways, two of which are illustrated below:
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.
题目大意:
给一张图, 对各个结点进行排列, 然后对于排列中的每一个点,求在图中与它相连的点在排列中的位置,算出它们在排列之间的最大距离, 最后,取这个排列中所有点的最大距离那个数为这个排列的bandwidth。
题目要我们求出所有排列中,bandwidth最小的那个排列,并输出这个排列和这个bandwidth
分析与总结:
比较简单的一道回溯题, 稍麻烦的是题目的输入。
只需要对求出所有排列的bandwidth,取其中最小的那个即可。注意可能会有多种方案,题目要求输出排列按字典序最小的那个方案。只要结点是按照顺序排列的,那么递归回溯出来的第一个答案一定是字典序最小的那个。
代码:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#define MAXN 50
using namespace std;
int edge[MAXN], order[MAXN], minOrder[MAXN];
int G[MAXN][MAXN],loc[MAXN], minVal, cnt;
char str[20000];
bool vis[50], occur[30];
void read_in(){
memset(occur, 0, sizeof(occur));
memset(G, 0, sizeof(G));
int len = strlen(str);
str[len] = ';';
str[len+1] = '\0';
int i=0;
int out[MAXN], top=0;
while(i<strlen(str)){
int u = str[i] - 'A';
occur[u] = true;
++i; ++i;
while(str[i]!=';'){
int v = str[i]-'A';
occur[v] = true;
++G[u][v];
++i;
}
++i;
}
cnt = 0;
for(int i=0; i<28; ++i) if(occur[i]){
edge[cnt++] = i;
}
}
int counter(){
int totalMax = -999;
for(int i=0; i<cnt; ++i){
int maxVal = -999;
for(int j=0; j<cnt; ++j)if(G[edge[order[i]]][edge[j]]){
int pos = loc[edge[j]];
if(abs(pos-i) > maxVal) maxVal=abs(pos-i);
}
if(maxVal > totalMax) totalMax = maxVal;
}
return totalMax;
}
void search(int cur){
if(minVal==1) return;
for(int i=0; i<cnt; ++i)if(!vis[i]){
vis[i] = true;
order[cur] = i;
loc[edge[i]] = cur;
search(cur+1);
vis[i] = false;
}
if(cur==cnt){
int totalMax = counter();
if(totalMax < minVal) {
minVal = totalMax;
memcpy(minOrder, order, sizeof(order));
}
}
}
int main(){
#ifdef LOCAL
freopen("input.txt","r",stdin);
#endif
while(gets(str)){
if(str[0]=='#') break;
read_in();
minVal = 9999999;
memset(vis, 0, sizeof(vis));
search(0);
for(int i=0; i<cnt; ++i) printf("%c ",edge[minOrder[i]]+'A');
printf("-> %d\n", minVal);
}
return 0;
}
—— 生命的意义,在于赋予它意义。
分享到:
相关推荐
A State-Space Technique for Ultrawide-Bandwidth Coherent Processing
高带宽内存接口(High-Bandwidth Memory,简称HBM)是一种先进的内存技术,旨在显著提升系统数据传输速率和效率,尤其在高性能计算、图形处理以及数据中心应用中发挥着重要作用。HBM是针对传统DDR(Double Data Rate...
在本文中,我们将深入探讨Laravel开发中的"laravel-bandwidth"组件,这是一个专为与带宽API交互设计的简洁Laravel接口。Laravel作为PHP的流行框架,提供了丰富的工具和功能,使得开发者能够构建高效、优雅的Web应用...
clumsy-bandwidth-win64:在Windows下,模拟网络环境(丢包,延迟,带宽)的软件,亲测可用
ADSL-Bandwidth是一款用于测试和分析ADSL连接带宽的小工具,它可以帮助用户了解自己的ADSL线路实际性能。 在使用ADSL-Bandwidth进行测试时,用户可以获取到以下关键知识点: 1. **带宽理论值与实际值**:ADSL-...
安装SDK node-bandwidth在NPM上可用: npm install --save node-bandwidth 支持的版本node-bandwidth应该在6.0.0所有版本的节点上都可以使用。 但是,由于Node和npm环境的快速发展,我们只能在LTS版本的Node上...
This paper describes a new control algorithm which can enhance the dynamics of a ... the bandwidth of the current controller was enhanced up to 250 Hz, and that of the speed controller was up to 50 Hz.
高带宽数字内容保护系统(High-bandwidth Digital Content Protection System,简称HDCP)是由英特尔公司开发的一种数字版权保护技术。其主要作用在于保护通过DisplayPort、数字视觉接口(DVI)、高清多媒体接口...
### KEYSIGHT DCA Wide-Bandwidth Oscilloscope Family #### 概述 KEYSIGHT DCA Wide-Bandwidth Oscilloscope Family 是一系列高性能、宽频带数字通信分析仪(DCA),旨在满足高速信号分析的需求。该系列包括 DCA-...
set -g @plugin 'xamut/tmux-network-bandwidth' 按prefix + I提取插件并获取其源代码。 完毕。 手动的 在某个地方克隆仓库。 在.tmux.conf添加run-shell : run-shell PATH_TO_REPO/tmux-network-bandwidth.tmux...
具体讲解了相干带宽和相干时间 内容和原理,让我们更容易理解衰落信道。
pip install bandwidth-sdk 用法 客户初始化 import bandwidth voice_api = bandwidth . client ( 'voice' , 'u-user' , 't-token' , 's-secret' ) messaging_api = bandwidth . client ( 'messaging' , 'u-user' ,...
<artifactId>bandwidth-java-iris-sdk <version>1.0 <scope>compile 如果你想自己编译它,方法如下: $ git clone git@github.com:bandwidthcom/java-bandwidth-iris.git $ cd java-bandwidth-iris $ mvn install ...
带宽Go SDK 注意:从2019年4月开始,低于1.0.0的go-bandwidth版本将与Bandwidth的V2消息传递不兼容。 如果您正在使用Bandwidth的V2消息传递,则需要将go-bandwidth软件包版本更新为1.0.0或更高版本。 如果您不使用...
注意:自2019年4月起,小于4.0.0的csharp-bandwidth版本将与Bandwidth的V2消息传递不兼容。 如果您使用带宽的V2消息传递,则需要将csharp-bandwidth软件包版本更新为4.0.0或更高版本。 如果您不使用带宽的V2消息...
收集网络带宽使用情况 收集了用于监视网络带宽使用... Exec username " /path/to/exec-network-bandwidth-usage.sh " " your-network-interface-name " < /Plugin > 重启收集: service collectd restart 屏幕截图
tpg-bandwidth是一个易于使用的实用程序,它返回TPG Australia连接的当前带宽使用情况和可用带宽。 将来,它将包括一个可刷新的图形界面,并支持帐户监视(信用等)。
An all-fiberized and narrow-bandwidth master oscillator power amplification (MOPA) system with record output power of 4 kW level and slope efficiency of 78% is demonstrated. Tandem pumping strategy is...