题意:

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

分析:

枚举全排列+剪枝

注意:

  • 输入时的处理
  • 虽然结点个数不超过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. SpringMvc如何将Url 映射到 RequestMapping (一)

    SpringMvc Url 匹配规则详解 最近开始阅读Spring 源码,虽然用了很久的spring ,但是没有真正的分析过Spring时如何工作的.今天重 MVC 的Url匹配规则开始进行Sprin ...

  2. visual assist x 注释配置

    /******************************************************************** created: $DATE$ created: $DAY$ ...

  3. css标签及属性

    css标签及属性 HTML引入CSS的方法 1.嵌入式  <style type = “text/css”>要写的样式</style> 2.外联式  <link rel ...

  4. TCP/UDP套接字 java socket编程实例

    网络协议七层结构: 什么是Socket? socket(套接字)是两个程序之间通过双向信道进行数据交换的端,可以理解为接口.使用socket编程也称为网络编程,socket只是接口并不是网络通信协议. ...

  5. Linux下支持mysql支持远程ip访问

    示例代码: use mysql; SELECT `Host`,`User` FROM user; UPDATE user SET `Host` = '%' WHERE `User` = 'use**' ...

  6. jQuery.ajax() 设置 Headers 中的 Accept 内容

    jQuery.ajax() 如何设置 Headers 中的 Accept 内容   其实很简单,首先如果是常见类型,则请直接设置 dataType 属性 $.ajax({ dataType: &quo ...

  7. 从0开始搭建SQL Server 2012 AlwaysOn 第二篇(配置故障转移集群)

    本篇主要讲配置Windows 故障转移集群及遇到的相关问题(坑),因为AlwaysOn是基于Windows的故障转移集群的 在讲解步骤之前需要了解一下故障转移集群仲裁配置 四种集群的仲裁配置: 1.多 ...

  8. druid监控及慢sql记录

    本文提要 前文也提到过druid不仅仅是一个连接池技术,因此在将整合druid到项目中后,这一篇文章将去介绍druid的其他特性和功能,作为一个辅助工具帮助提升项目的性能,本文的重点就是两个字:监控. ...

  9. window_c++_socket编程_winsock2.h

    1.初始化动态链接库 WSAStartup: The WSAStartup function initiates use of the Winsock DLL by a process. WSASta ...

  10. HDU_1856_带权并查集

    有10000000个同学,他们之间可能是直接朋友或者间接朋友,问最大的朋友圈有多少人. 一直觉得10000000的数组开不了,用map优化了一下,结果能开,且10000000也不会超时... #inc ...