题意:给出n个节点的图,和一个节点的排列,定义节点i的带宽b[i]为i和其相邻节点在排列中的最远的距离,所有的b[i]的最大值为这个图的带宽,给一个图,求出带宽最小的节点排列

看的紫书,紫书上说得很详细--

看标程的时候算每个图的带宽的时候看了好久,原来是这样的

打印出u[i],v[i]的值就知道了

样例:

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

对于每一个u[i],v[i],abs(u[i]-v[i])就是相邻节点之间的距离, 再在这里面找出最大值

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include <cmath>
 5 #include<stack>
 6 #include<vector>
 7 #include<map>
 8 #include<set>
 9 #include<queue>
10 #include<algorithm>
11 using namespace std;
12
13 #define foreach(i,c) for (__typeof(c.begin()) i = c.begin(); i != c.end(); ++i)
14
15 typedef long long LL;
16 const int INF = (1<<30)-1;
17 const int mod=1000000007;
18 const int maxn=100005;
19
20 char input[maxn];
21 int id[maxn],letter[maxn];
22
23
24 int main(){
25 //    freopen("in.txt","r",stdin);
26 //    freopen("out.txt","w",stdout);
27     while(scanf("%s",input)!=EOF&&input[0]!='#'){
28         int n=0;
29         for(char ch='A';ch<='Z';ch++){//输入处理
30             if(strchr(input,ch)!=NULL){
31                 id[ch]=n++;
32                 letter[id[ch]]=ch;
33             }
34
35         }
36
37         int len=strlen(input),p=0,q=0;
38         vector<int> u,v;
39
40         for(;;){
41             while(p<len&&input[p]!=':') p++;
42             if(p==len) break;
43             while(q<len&&input[q]!=';') q++;
44
45             for(int i=p+1;i<q;i++){
46                 u.push_back(id[input[p-1]]);
47                 v.push_back(id[input[i]]);
48             }
49
50             p++;q++;//都向后挪一位,不挪的话,p位置一直是‘:’,q位置一直是';',就超时了
51         }
52
53
54         int P[maxn],bestP[maxn],pos[maxn],ans=n;
55
56         for(int i=0;i<n;i++) P[i]=i;
57         do{
58             for(int i=0;i<n;i++) pos[P[i]]=i;//记录下在这个排列中的位置
59
60             int bandwidth=0;
61
62             for(int i=0;i<u.size();i++)
63             bandwidth=max(bandwidth,abs(pos[u[i]]-pos[v[i]]));//求出当前的带宽
64
65             if(bandwidth<ans){//维护一个最小的带宽的值,并保存下此时的排列
66                 ans=bandwidth;
67                 memcpy(bestP,P,sizeof(P));
68             }
69         } while(next_permutation(P,P+n));
70
71
72         for(int i=0;i<n;i++) printf("%c ",letter[bestP[i]]);
73         printf("-> %d\n",ans);
74     }
75     return 0;
76
77 }

View Code

转载于:https://www.cnblogs.com/wuyuewoniu/p/4467008.html

UVa 140 Bandwidth【枚举排列】相关推荐

  1. Uva 140 Bandwidth

    基本思路是暴力枚举,思考一下可以发现,可以跳过一下情况.对于目前最小的minBW,每次枚举一种排列计算bandwidth进行比较,如果大于当前minBW已经可以断定这个排列已经不可能是最好的解了. 而 ...

  2. 简单枚举 / 枚举排列

    本文参考<算法竞赛入门经典>第七章<暴力枚举法>,提出的是暴力"列举"出所有可能性并一一试验的方法. 目录 1 简单枚举 2 枚举排列 2.1 生成1~n的 ...

  3. UVa 729 The Hamming Distance Problem【枚举排列】

    题意:给出数组的长度n,给出h,表示这个数组里面含有h个1,求其所有的排列 用next_permutation就可以了 1 #include<iostream> 2 #include< ...

  4. 暴力求解法 之 枚举排列

    1.生成1~n的排列 #include<stdio.h> #include<string.h> const int N=1e3+10; int a[N]; void print ...

  5. UVa LA 4253 UVa 1421 Archery 枚举,状态削减,oj错误题目 难度: 1

    题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...

  6. 模版 ----- 一维指数型枚举 排列型枚举 组合型枚举

    文章目录 一维指数型枚举 一.01型枚举 应用场景 递归树模型 时间复杂度 代码模版 应用 二.滑动型枚举 应用场景 递归树模型 时间复杂度 代码模版 排列型枚举 应用场景 递归树模型 时间复杂度分析 ...

  7. 140:Bandwidth

    Bandwidth 注意节点不一定是按字母表顺序从前到后用的,也有可能是A C 却没用B,因为这个TLE了好几次.. #include<bits/stdc++.h> using names ...

  8. 算法竞赛入门经典读书笔记(三)7.2枚举排列

    7.2.1生成1~n的所有排列 递归调用的方法可以实现. [cpp] view plaincopy #include <iostream> using namespace std; voi ...

  9. 【NOIP2004】【Luogu1088】火星人(枚举排列)

    problem 给定一个长为n的排列 求他的后面的第m个排列 n<1e4,m<100 solution C++STL的next_permutation了解一下,复杂度O(n)的. 全题复杂 ...

最新文章

  1. 【组队学习】【23期】Datawhale深度推荐模型
  2. 图形描述语言GraphML(3):图形元数据
  3. 【数据结构与算法】之深入解析“最长公共前缀”的求解思路与算法示例
  4. 线性直接变换方法对摄像机进行标定
  5. 140种Python标准库、第三方库和外部工具都有了
  6. java8新特性(7)— Base64
  7. EmptyPage(空白页组件)原理与使用
  8. 模拟退火(bzoj 3680: 吊打XXX)
  9. YouCompleteMe自动补全的安装配置与使用
  10. 计算机地址聚合,cidr怎么算?cidr地址聚合快速算法
  11. OSX: Mac不睡眠的排查
  12. dnf新起号怎么才不出人脸_教你如何快速养成一个新号 新角色速成教学
  13. android多开原理和检测。
  14. 数学专业英语--极限
  15. 期货什么情况下会强制平仓
  16. 服务器响应到客户端中文乱码的解决方式
  17. BackTrack安装
  18. android 直播悬浮窗口,实战:快手直播伴侣 解决安卓悬浮窗/闪退等问题
  19. 如何在K8S上备份和恢复MySQL
  20. 使用正则 去除标签, 提取HTML 纯文本

热门文章

  1. 物联网设备感染Mirai病毒发起的DDoS攻击
  2. 面向小姐姐的编程——JAVA面向对象之继承(三)
  3. linux7squid编译安装,CentOS 7.3 源码安装squid 4.12 及安装过程遇到的一些问题
  4. mysql5.7.17免安装版_MySql 5.7.17免安装配置
  5. mysql 查询两张表结构相同的数据库_数据库原理习题(含答案)
  6. xml 纯内容标签_Python小课堂XML 解析
  7. 图像处理-二值形态学运算
  8. oracle把两个字段拼接在一起,请问Oracle中两个日期拼接在一起的语句应该怎么写?...
  9. java log4j 热部署_JAVA类加载器分析--热部署的缺陷(有代码示例,及分析)
  10. python和c#交互_python与C#的互相调用