首先有一个性质,一个双联通图一定可以拆成一个小的双联通子图和一条链

一个点可以视为权值为0的双联通图或者一个点的链

状压DP,枚举子集

O(3^n*n^2)

  1. #include<cstdio>
  2. #include<algorithm>
  3. #define rep(i,x,y) for (int i=x; i<y; i++)
  4. using namespace std;
  5. int cnt,M[1005][1005],H[5005][15][15],last[15],G[5005][15][2],F[5005];
  6. struct node{
  7. int to,next,val;
  8. }e[1000005];
  9. void add(int a,int b,int c){
  10. e[++cnt].to=b;
  11. e[cnt].next=last[a];
  12. e[cnt].val=c;
  13. last[a]=cnt;
  14. }
  15. int main(){
  16. int T;
  17. scanf("%d",&T);
  18. while (T--){
  19. int n,m;
  20. scanf("%d%d",&n,&m);
  21. cnt=0;
  22. for (int i=0; i<n; i++) last[i]=0;
  23. rep(i,0,n) rep(j,0,n) M[i][j]=1e9;
  24. for (int i=1; i<=m; i++){
  25. int x,y,z;
  26. scanf("%d%d%d",&x,&y,&z);
  27. x--,y--;
  28. add(x,y,z);
  29. add(y,x,z);
  30. M[x][y]=min(M[x][y],z);
  31. M[y][x]=min(M[y][x],z);
  32. }
  33. int Max=(1<<n);
  34.  
  35. rep(i,0,Max) rep(x,0,n) rep(y,0,n) H[i][x][y]=1e9;
  36.  
  37. for (int i=0; i<n; i++) H[1<<i][i][i]=0;
  38.  
  39. for (int i=0; i<Max; i++)
  40. for (int S=0; S<n; S++)
  41. for (int T=0; T<n; T++)
  42. if (H[i][S][T]!=1e9){
  43. for (int To=0; To<n; To++){
  44. if (i&(1<<To)) continue;
  45. H[i|(1<<To)][S][To]=min(H[i|(1<<To)][S][To],H[i][S][T]+M[To][T]);
  46. }
  47. }
  48.  
  49. rep(i,0,Max) rep(S,0,n) G[i][S][0]=G[i][S][1]=1e9;
  50. for (int i=0; i<Max; i++)
  51. for (int S=0; S<n; S++)
  52. for (int j=last[S]; j; j=e[j].next){
  53. int T=e[j].to;
  54. if (i&(1<<T)){
  55. if (G[i][S][0]>=e[j].val){
  56. G[i][S][1]=G[i][S][0];
  57. G[i][S][0]=e[j].val;
  58. }
  59. else if (G[i][S][1]>e[j].val) G[i][S][1]=e[j].val;
  60. }
  61. }
  62.  
  63. rep(i,0,Max) F[i]=1e9;
  64.  
  65. for (int i=0; i<n; i++) F[1<<i]=0;
  66. for (int i=0; i<Max; i++)
  67. for (int pre=(i-1)&i; pre; pre=(pre-1)&i){
  68. int now=i-pre;
  69. for (int S=0; S<n; S++)
  70. for (int T=0; T<n; T++){
  71. if (now&(1<<S) && now&(1<<T)){
  72. int Sum=H[now][S][T]+G[pre][S][0];
  73. if (Sum>=1e9) continue;
  74. if (S!=T) Sum+=G[pre][T][0];
  75. else Sum+=G[pre][T][1];
  76. F[i]=min(F[i],F[pre]+Sum);
  77. }
  78. }
  79. }
  80. if (F[Max-1]==1e9) printf("impossible\n");
  81. else printf("%d\n",F[Max-1]);
  82. }
  83. return 0;
  84. }

  

BZOJ 3590: [Snoi2013]Quare的更多相关文章

  1. 【BZOJ3590】[Snoi2013]Quare 状压DP

    这道题...神题. 首先看到数据范围,一眼状压 dp .然后? 没了. 理性分析,这里说断掉任意一条边图依然连通,即整个图构成一个边双(而不是点双). 之前用 fire (机房里的随机算法总称)之所以 ...

  2. BZOJ3590 [Snoi2013]Quare

    题意 4.20四川芦山地震发生后,抗震救灾委员会接到一个紧急任务,四川省给该委员会发了一份地图,这份地图给出了该省一些城市的情况:任两个城市是用一条或多条公路连接起来的,也可以没有公路连接,但是每个城 ...

  3. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  4. poj 3590 The shuffle Problem——DP+置换

    题目:http://poj.org/problem?id=3590 bzoj 1025 的弱化版.大概一样的 dp . 输出方案的时候小的环靠前.不用担心 dp 时用 > 还是 >= 来转 ...

  5. BZOJ 2127: happiness [最小割]

    2127: happiness Time Limit: 51 Sec  Memory Limit: 259 MBSubmit: 1815  Solved: 878[Submit][Status][Di ...

  6. BZOJ 3275: Number

    3275: Number Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 874  Solved: 371[Submit][Status][Discus ...

  7. BZOJ 2879: [Noi2012]美食节

    2879: [Noi2012]美食节 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1834  Solved: 969[Submit][Status] ...

  8. bzoj 4610 Ceiling Functi

    bzoj 4610 Ceiling Functi Description bzoj上的描述有问题 给出\(n\)个长度为\(k\)的数列,将每个数列构成一个二叉搜索树,问有多少颗形态不同的树. Inp ...

  9. BZOJ 题目整理

    bzoj 500题纪念 总结一发题目吧,挑几道题整理一下,(方便拖板子) 1039:每条线段与前一条线段之间的长度的比例和夹角不会因平移.旋转.放缩而改变,所以将每条轨迹改为比例和夹角的序列,复制一份 ...

随机推荐

  1. Java 多线程概念

    1.为什么要使用多线程: 更多的处理器核心. 更快的响应时间. 更好的变成模型. 2.线程的优先级: 现代操作系统基本采用时分的形式调度运行的线程,操作系统会分出一个个的时间片,线程会分配到若干时间片 ...

  2. Java基于springMVC的验证码案例

    ``` Java验证码案例(基于springMVC方式) 验证码工具类 package com.ekyb.common.util; import java.awt.Color; import java ...

  3. java获取服务器一些信息的方法

    request.getServletContext().getRealPath("/") 获取项目所在服务器的全路径,如:D:\Program Files\apache-tomca ...

  4. Java的API及Object类、String类、字符串缓冲区

    Java 的API 1.1定义 API: Application(应用) Programming(程序) Interface(接口) Java API就是JDK中提供给开发者使用的类,这些类将底层的代 ...

  5. Ubuntu 11.04源

    ##国内源#这个北京交通大学的源也挺不错的,我们首选这个,速度很不错deb http://mirror.bjtu.edu.cn/ubuntu/ narwhal multiversedeb http:/ ...

  6. Exchange DSAccess 事件分析

    本文介绍了如何使用事件 ID 2080 来帮助诊断 Exchange DSAccess 问题中所包含的信息. 许多朋友经常遇到Active Directory 域和Exchange 服务器通信问题.那 ...

  7. Java VS Python 应该先学哪个?

    http://blog.segmentfault.com/hlcfan/1190000000361407 http://www.tuicool.com/articles/fqAzqi Java 和 P ...

  8. jspscriptlet标签

    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding= ...

  9. 【Python图像特征的音乐序列生成】关于数据库到底在哪里下载

    毕竟原网站一个是14年前的一个是16年前的…… 1,http://ifdo.ca/~seymour/nottingham/nottingham.html 这个网站可以下载zip包. 2,https:/ ...

  10. 日常-acm-开灯问题

    开灯问题.有n盏灯,编号1-n.第一个人把所有的灯打开,第二个人按下所有编号为二的倍数的开关(全关掉),第三个人按下所有编号为三的倍数的开关,以此类推.一共k个人,问最后开着的灯的编号.输入n和k,输 ...