题意:

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

分析:

枚举全排列+剪枝

注意:

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

代码:

  1. #include<iostream>
  2. #include<cstring>
  3. #include<vector>
  4. #include<cstdio>
  5. #include<algorithm>
  6. using namespace std;
  7. const int maxn = 100;
  8. int s[maxn], d[maxn],result[maxn], id[maxn], aa[maxn];;
  9. int n, maxd = 0, mind = 30;
  10. pair <char,char>pa[maxn];
  11. vector<int>m[maxn];
  12. int main (void)
  13. {
  14. char str[maxn];
  15. scanf("%s",str);
  16. while(str[0]!='#'){
  17. for(int i=0; i < maxn; i++) vector<int>().swap(m[i]);
  18. memset(aa,0,sizeof(aa));
  19. int flag = 1,k = 0;
  20. n=0, maxd = 0, mind = 20;
  21. char t;
  22. for(int i = 0; i < strlen(str); i++){
  23. if(str[i]==';') flag=1;
  24. else if(str[i]==':') flag=0;
  25. else{
  26. if(aa[str[i]-'A']==0){
  27. id[n++] = str[i]-'A';
  28. aa[str[i]-'A']=1;
  29. }
  30. if(flag==1) t=str[i];
  31. else if(flag==0) pa[k++]=make_pair(str[i],t);
  32. }
  33. }
  34. sort(id, id+n);
  35. for(int i = 0; i < k; i++){
  36. int a = pa[i].first-'A';
  37. int b = pa[i].second-'A';
  38. if(find(m[a].begin(),m[a].end(),b)==m[a].end()) m[a].push_back(b);
  39. if(find(m[b].begin(),m[b].end(),a)==m[b].end()) m[b].push_back(a);
  40. }
  41. for(int i = 0; i < n; i++) s[i] = id[i];
  42. do{
  43. maxd = 0;
  44. for(int i = 0; i < n; i++) d[s[i]] =i;
  45. for(int j = 0; j < n; j ++){
  46. for(int i = 0; i <m[id[j]].size(); i++){
  47. if(d[m[id[j]][i]]-d[id[j]]>0)
  48. maxd = max(maxd, d[m[id[j]][i]]-d[id[j]]);
  49. }
  50. if(maxd>mind) break;
  51. }
  52. if(mind>maxd){
  53. mind=maxd;
  54. for(int i = 0; i < n; i++) result[i]=s[i];
  55. }
  56. }while(next_permutation(s,s+n));
  57. for(int i = 0; i < n; i++) printf("%c ",result[i]+'A');
  58. printf("-> %d\n", mind);
  59. scanf("%s",str);
  60. }
  61. }

爱上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. jQuery相关知识总结

    1 encodeURIComponent(city)处理js传值乱码问题 2 总体概述 以后项目如果没有特殊情况,一般采用jQuery作为最基础的公共底层库. 另外对于前端的javascript相关的 ...

  2. jstat命令-帮助优化java性能

    jstat命令使用 jstat命令可以查看堆内存各部分的使用量,以及加载类的数量.命令的格式如下: jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数]

  3. 开源项目:JEECG

    工程下载:https://github.com/zymqqc/jeecg-1

  4. hihocoder offer收割编程练习赛12 B 一面砖墙

    思路: 就是求哪个长度出现的次数最多. 实现: #include <iostream> #include <cstdio> #include <algorithm> ...

  5. Cannot load php5apache2_4.dll into server 问题的解决方法

    解决方法,重新安装 VC9或 VC11 试试,或者全部安装VC9  VC11 注意:如果下载的 php5.5为32位版本, 那么安装的vc9或VC11 也必须是32位版本.           如果下 ...

  6. nutz配置druid监控

    druid 提供了一个web端的监控页面, 搭建起来不算麻烦, 建议添加. 打开web.xml, 在nutz的filter之前, 加入Web监控的配置 <filter> <filte ...

  7. 【java】查重类的实现

    import java.util.Vector; public class ElementCheck { // 重复优先 static Vector<Integer> CheckSameE ...

  8. 在DOS行下设置静态IP

    A.设置静态IP  CMD  netsh  netsh>int  interface>ip  interface ip>set add "本地链接" static ...

  9. webpack的详细介绍和使用

    // 一个常见的`webpack`配置文件 const webpack = require('webpack'); const HtmlWebpackPlugin = require('html-we ...

  10. Spring全局异常捕获

    package org.xxx.ac.zpk.exception; import java.io.IOException; import javax.servlet.http.HttpServletR ...