题意:

定义一个结点的带宽是其距离所有相连结点的最远距离,一个图的带宽是图中所有结点带宽的最小值。给出一个图中各个结点的相邻情况,要求写出一个结点的排列,使得其所构成的图带宽最小。

分析:

枚举全排列+剪枝

注意:

  • 输入时的处理
  • 虽然结点个数不超过8个但是结点可以是26个字母中的任意一个!
  • 孤立结点的情况

代码:

#include<iostream>
#include<cstring>
#include<vector>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn = 100;
int s[maxn], d[maxn],result[maxn], id[maxn], aa[maxn];;
int n, maxd = 0, mind = 30;
pair <char,char>pa[maxn];
vector<int>m[maxn];
int main (void)
{
char str[maxn];
scanf("%s",str);
while(str[0]!='#'){
for(int i=0; i < maxn; i++) vector<int>().swap(m[i]);
memset(aa,0,sizeof(aa));
int flag = 1,k = 0;
n=0, maxd = 0, mind = 20;
char t;
for(int i = 0; i < strlen(str); i++){
if(str[i]==';') flag=1;
else if(str[i]==':') flag=0;
else{
if(aa[str[i]-'A']==0){
id[n++] = str[i]-'A';
aa[str[i]-'A']=1;
}
if(flag==1) t=str[i];
else if(flag==0) pa[k++]=make_pair(str[i],t);
}
}
sort(id, id+n);
for(int i = 0; i < k; i++){
int a = pa[i].first-'A';
int b = pa[i].second-'A';
if(find(m[a].begin(),m[a].end(),b)==m[a].end()) m[a].push_back(b);
if(find(m[b].begin(),m[b].end(),a)==m[b].end()) m[b].push_back(a);
}
for(int i = 0; i < n; i++) s[i] = id[i];
do{
maxd = 0;
for(int i = 0; i < n; i++) d[s[i]] =i;
for(int j = 0; j < n; j ++){
for(int i = 0; i <m[id[j]].size(); i++){
if(d[m[id[j]][i]]-d[id[j]]>0)
maxd = max(maxd, d[m[id[j]][i]]-d[id[j]]);
}
if(maxd>mind) break;
}
if(mind>maxd){
mind=maxd;
for(int i = 0; i < n; i++) result[i]=s[i];
}
}while(next_permutation(s,s+n));
for(int i = 0; i < n; i++) printf("%c ",result[i]+'A');
printf("-> %d\n", mind);
scanf("%s",str);
}
}

爱上pair

好多地方处理的还是笨呼呼

UVA 140_Bandwidth的更多相关文章

  1. uva 1354 Mobile Computing ——yhx

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGcAAANuCAYAAAC7f2QuAAAgAElEQVR4nOy9XUhjWbo3vu72RRgkF5

  2. UVA 10564 Paths through the Hourglass[DP 打印]

    UVA - 10564 Paths through the Hourglass 题意: 要求从第一层走到最下面一层,只能往左下或右下走 问有多少条路径之和刚好等于S? 如果有的话,输出字典序最小的路径 ...

  3. UVA 11404 Palindromic Subsequence[DP LCS 打印]

    UVA - 11404 Palindromic Subsequence 题意:一个字符串,删去0个或多个字符,输出字典序最小且最长的回文字符串 不要求路径区间DP都可以做 然而要字典序最小 倒过来求L ...

  4. UVA&&POJ离散概率与数学期望入门练习[4]

    POJ3869 Headshot 题意:给出左轮手枪的子弹序列,打了一枪没子弹,要使下一枪也没子弹概率最大应该rotate还是shoot 条件概率,|00|/(|00|+|01|)和|0|/n谁大的问 ...

  5. UVA计数方法练习[3]

    UVA - 11538 Chess Queen 题意:n*m放置两个互相攻击的后的方案数 分开讨论行 列 两条对角线 一个求和式 可以化简后计算 // // main.cpp // uva11538 ...

  6. UVA数学入门训练Round1[6]

    UVA - 11388 GCD LCM 题意:输入g和l,找到a和b,gcd(a,b)=g,lacm(a,b)=l,a<b且a最小 g不能整除l时无解,否则一定g,l最小 #include &l ...

  7. UVA - 1625 Color Length[序列DP 代价计算技巧]

    UVA - 1625 Color Length   白书 很明显f[i][j]表示第一个取到i第二个取到j的代价 问题在于代价的计算,并不知道每种颜色的开始和结束   和模拟赛那道环形DP很想,计算这 ...

  8. UVA - 10375 Choose and divide[唯一分解定理]

    UVA - 10375 Choose and divide Choose and divide Time Limit: 1000MS   Memory Limit: 65536K Total Subm ...

  9. UVA - 11584 Partitioning by Palindromes[序列DP]

    UVA - 11584 Partitioning by Palindromes We say a sequence of char- acters is a palindrome if it is t ...

随机推荐

  1. javaScript关闭浏览器 (不弹出提示框)

    一段JavaScript脚本程序,负责关闭窗口,如果网页不是通过脚本程序打开的(window.open()),调用window.close()脚本关闭窗口前,必须先将window.opener对象置为 ...

  2. 如何安装sql server2005 windows 8

    如何安装sql server2005   windows 8 1 从网上下载到本地文件 ,这里使用的是cs_sql_2005_dev_all_dvd 安装版. 2. 点击下图所表示进行安装   3. ...

  3. iOS-UI控件之UITableView(二)- 自定义不等高的cell

    不等高的cell 给模型增加frame数据 所有子控件的frame cell的高度 @interface XMGStatus : NSObject /**** 文字\图片数据 ****/ // ... ...

  4. H.264和HEVC分析软件和工具【转】

    一.264分析两大利器:264VISA和Elecard StreamEye Tools 264visa 强力的h264实时分析工具 ,能分析各种场合下的h264资源,适用于h264开发者,学习者.在图 ...

  5. IE盒模型和标准w3c盒模型

    Margin(外边距) - 清除边框外的区域,外边距是透明的.Border(边框) - 围绕在内边距和内容外的边框.Padding(内边距) - 清除内容周围的区域,内边距是透明的.Content(内 ...

  6. MyHome3D在线装修设计软件测评

    人人都是设计师 ——MyHome3D在线装修设计软件 关键词:云技术,3D呈现效果,自主设计,简单易用,家具装修设计 上海爱福窝云技术有限公司借助于前沿的3D渲染技术,降低了装修设计的门槛,真正实现了 ...

  7. 集成新版(5.17+)Activiti Modeler与Rest服务

    声明: 此教程适合Activiti 5.17+版本. 本博客所涉及的内容均可在kft-activiti-demo中找到. 在线demo可以访问 http://demo.kafeitu.me:8080/ ...

  8. (转)淘淘商城系列——VMware添加已配置好的虚拟机

    http://blog.csdn.net/yerenyuan_pku/article/details/72802323 我们有时候会碰到虚拟机环境搭建特别麻烦,很容易出错的问题,而这时我们又刚好有别人 ...

  9. Python之三元运算、集合、函数

    一.三元运算符 三元运算符就是在赋值变量的时候,可以直接加判断,然后赋值 格式:[on_true] if [expression] else [on_false] res = 值1 if 条件 els ...

  10. php使用命名空间时自动加载机制

    命名空间主要为了解决用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突.不过并不是你定义了使用命名空间的类,就可以在任何地方随意使用了,需要在程序运行时将定义命名空间的类文 ...