UVA 140_Bandwidth
题意:
定义一个结点的带宽是其距离所有相连结点的最远距离,一个图的带宽是图中所有结点带宽的最小值。给出一个图中各个结点的相邻情况,要求写出一个结点的排列,使得其所构成的图带宽最小。
分析:
枚举全排列+剪枝
注意:
- 输入时的处理
- 虽然结点个数不超过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的更多相关文章
- uva 1354 Mobile Computing ——yhx
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGcAAANuCAYAAAC7f2QuAAAgAElEQVR4nOy9XUhjWbo3vu72RRgkF5
- UVA 10564 Paths through the Hourglass[DP 打印]
UVA - 10564 Paths through the Hourglass 题意: 要求从第一层走到最下面一层,只能往左下或右下走 问有多少条路径之和刚好等于S? 如果有的话,输出字典序最小的路径 ...
- UVA 11404 Palindromic Subsequence[DP LCS 打印]
UVA - 11404 Palindromic Subsequence 题意:一个字符串,删去0个或多个字符,输出字典序最小且最长的回文字符串 不要求路径区间DP都可以做 然而要字典序最小 倒过来求L ...
- UVA&&POJ离散概率与数学期望入门练习[4]
POJ3869 Headshot 题意:给出左轮手枪的子弹序列,打了一枪没子弹,要使下一枪也没子弹概率最大应该rotate还是shoot 条件概率,|00|/(|00|+|01|)和|0|/n谁大的问 ...
- UVA计数方法练习[3]
UVA - 11538 Chess Queen 题意:n*m放置两个互相攻击的后的方案数 分开讨论行 列 两条对角线 一个求和式 可以化简后计算 // // main.cpp // uva11538 ...
- 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 ...
- UVA - 1625 Color Length[序列DP 代价计算技巧]
UVA - 1625 Color Length 白书 很明显f[i][j]表示第一个取到i第二个取到j的代价 问题在于代价的计算,并不知道每种颜色的开始和结束 和模拟赛那道环形DP很想,计算这 ...
- UVA - 10375 Choose and divide[唯一分解定理]
UVA - 10375 Choose and divide Choose and divide Time Limit: 1000MS Memory Limit: 65536K Total Subm ...
- 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 ...
随机推荐
- 工作记录 主要了解EF 列注释DataAnnotations
遇到一个问题,是子类型必须完全转换为父类型,普通的显示转化.隐式转化.Cast.ConvertAll等方法无效,用Newtonsoft.Json转化才解决 var json = JsonConvert ...
- AJPFX总结面向对象特征之一的继承知识
继 承(面向对象特征之一) 好处: 1:提高了代码的复用性. 2:让类与类之间产生了关系,提供了另一个特征多态的前提. 父类的由来:其实是由多个类不断向上抽取共性内容而来的. java中对于继承, ...
- 搜索可用docker镜像
简介:这一步的目标是学会使用docker search命令来检索可用镜像. 搜索可用的docker镜像 目标: 提示: 正确的命令: 搜索可用的docker镜像 使用docker最简单的方式莫过于从现 ...
- oracle DBA笔试题
Unix/Linux题目: 1.如何查看主机CPU.内存.IP和磁盘空间? cat /proc/cpuinfo cat /proc/meminfo ifconfig –a fdisk –l 2.你 ...
- 黑马程序员----java基础:多线程
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ---- ...
- php与其他一些相关工具的安装步骤分享
现在很少花时间来专门写博客,都是把平时看到用到的东西像随笔一样记录在云笔记上. 在这儿分享一些php相关的技术安装过程: linux下编译安装php:php安装 phpunit安装过程:phpunit ...
- April Fools Day Contest 2019: editorial回顾补题
A. Thanos Sort time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- Duplicate fragment name ERROR Jetty Maven Plugin
http://stackoverflow.com/questions/5802096/duplicate-fragment-name-error-jetty-maven-plugin 4down vo ...
- WebDriver的多浏览器测试的浏览器驱动程序
1.在使用IE浏览器进行WebDriver自动化测试之前,需要从http://docs.seleniumhq.org/download/网站上下载一个WebDriver链接IE浏览器的驱动程序,文件名 ...
- mySQL--找出各科最高成绩
//找出各科最高成绩create table gradeMax(id int primary key auto_increment,name varchar(20),subject varchar(2 ...