BZOJ 3590: [Snoi2013]Quare
首先有一个性质,一个双联通图一定可以拆成一个小的双联通子图和一条链
一个点可以视为权值为0的双联通图或者一个点的链
状压DP,枚举子集
O(3^n*n^2)
- #include<cstdio>
- #include<algorithm>
- #define rep(i,x,y) for (int i=x; i<y; i++)
- using namespace std;
- int cnt,M[1005][1005],H[5005][15][15],last[15],G[5005][15][2],F[5005];
- struct node{
- int to,next,val;
- }e[1000005];
- void add(int a,int b,int c){
- e[++cnt].to=b;
- e[cnt].next=last[a];
- e[cnt].val=c;
- last[a]=cnt;
- }
- int main(){
- int T;
- scanf("%d",&T);
- while (T--){
- int n,m;
- scanf("%d%d",&n,&m);
- cnt=0;
- for (int i=0; i<n; i++) last[i]=0;
- rep(i,0,n) rep(j,0,n) M[i][j]=1e9;
- for (int i=1; i<=m; i++){
- int x,y,z;
- scanf("%d%d%d",&x,&y,&z);
- x--,y--;
- add(x,y,z);
- add(y,x,z);
- M[x][y]=min(M[x][y],z);
- M[y][x]=min(M[y][x],z);
- }
- int Max=(1<<n);
- rep(i,0,Max) rep(x,0,n) rep(y,0,n) H[i][x][y]=1e9;
- for (int i=0; i<n; i++) H[1<<i][i][i]=0;
- for (int i=0; i<Max; i++)
- for (int S=0; S<n; S++)
- for (int T=0; T<n; T++)
- if (H[i][S][T]!=1e9){
- for (int To=0; To<n; To++){
- if (i&(1<<To)) continue;
- H[i|(1<<To)][S][To]=min(H[i|(1<<To)][S][To],H[i][S][T]+M[To][T]);
- }
- }
- rep(i,0,Max) rep(S,0,n) G[i][S][0]=G[i][S][1]=1e9;
- for (int i=0; i<Max; i++)
- for (int S=0; S<n; S++)
- for (int j=last[S]; j; j=e[j].next){
- int T=e[j].to;
- if (i&(1<<T)){
- if (G[i][S][0]>=e[j].val){
- G[i][S][1]=G[i][S][0];
- G[i][S][0]=e[j].val;
- }
- else if (G[i][S][1]>e[j].val) G[i][S][1]=e[j].val;
- }
- }
- rep(i,0,Max) F[i]=1e9;
- for (int i=0; i<n; i++) F[1<<i]=0;
- for (int i=0; i<Max; i++)
- for (int pre=(i-1)&i; pre; pre=(pre-1)&i){
- int now=i-pre;
- for (int S=0; S<n; S++)
- for (int T=0; T<n; T++){
- if (now&(1<<S) && now&(1<<T)){
- int Sum=H[now][S][T]+G[pre][S][0];
- if (Sum>=1e9) continue;
- if (S!=T) Sum+=G[pre][T][0];
- else Sum+=G[pre][T][1];
- F[i]=min(F[i],F[pre]+Sum);
- }
- }
- }
- if (F[Max-1]==1e9) printf("impossible\n");
- else printf("%d\n",F[Max-1]);
- }
- return 0;
- }
BZOJ 3590: [Snoi2013]Quare的更多相关文章
- 【BZOJ3590】[Snoi2013]Quare 状压DP
这道题...神题. 首先看到数据范围,一眼状压 dp .然后? 没了. 理性分析,这里说断掉任意一条边图依然连通,即整个图构成一个边双(而不是点双). 之前用 fire (机房里的随机算法总称)之所以 ...
- BZOJ3590 [Snoi2013]Quare
题意 4.20四川芦山地震发生后,抗震救灾委员会接到一个紧急任务,四川省给该委员会发了一份地图,这份地图给出了该省一些城市的情况:任两个城市是用一条或多条公路连接起来的,也可以没有公路连接,但是每个城 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- poj 3590 The shuffle Problem——DP+置换
题目:http://poj.org/problem?id=3590 bzoj 1025 的弱化版.大概一样的 dp . 输出方案的时候小的环靠前.不用担心 dp 时用 > 还是 >= 来转 ...
- BZOJ 2127: happiness [最小割]
2127: happiness Time Limit: 51 Sec Memory Limit: 259 MBSubmit: 1815 Solved: 878[Submit][Status][Di ...
- BZOJ 3275: Number
3275: Number Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 874 Solved: 371[Submit][Status][Discus ...
- BZOJ 2879: [Noi2012]美食节
2879: [Noi2012]美食节 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1834 Solved: 969[Submit][Status] ...
- bzoj 4610 Ceiling Functi
bzoj 4610 Ceiling Functi Description bzoj上的描述有问题 给出\(n\)个长度为\(k\)的数列,将每个数列构成一个二叉搜索树,问有多少颗形态不同的树. Inp ...
- BZOJ 题目整理
bzoj 500题纪念 总结一发题目吧,挑几道题整理一下,(方便拖板子) 1039:每条线段与前一条线段之间的长度的比例和夹角不会因平移.旋转.放缩而改变,所以将每条轨迹改为比例和夹角的序列,复制一份 ...
随机推荐
- Java 多线程概念
1.为什么要使用多线程: 更多的处理器核心. 更快的响应时间. 更好的变成模型. 2.线程的优先级: 现代操作系统基本采用时分的形式调度运行的线程,操作系统会分出一个个的时间片,线程会分配到若干时间片 ...
- Java基于springMVC的验证码案例
``` Java验证码案例(基于springMVC方式) 验证码工具类 package com.ekyb.common.util; import java.awt.Color; import java ...
- java获取服务器一些信息的方法
request.getServletContext().getRealPath("/") 获取项目所在服务器的全路径,如:D:\Program Files\apache-tomca ...
- Java的API及Object类、String类、字符串缓冲区
Java 的API 1.1定义 API: Application(应用) Programming(程序) Interface(接口) Java API就是JDK中提供给开发者使用的类,这些类将底层的代 ...
- Ubuntu 11.04源
##国内源#这个北京交通大学的源也挺不错的,我们首选这个,速度很不错deb http://mirror.bjtu.edu.cn/ubuntu/ narwhal multiversedeb http:/ ...
- Exchange DSAccess 事件分析
本文介绍了如何使用事件 ID 2080 来帮助诊断 Exchange DSAccess 问题中所包含的信息. 许多朋友经常遇到Active Directory 域和Exchange 服务器通信问题.那 ...
- Java VS Python 应该先学哪个?
http://blog.segmentfault.com/hlcfan/1190000000361407 http://www.tuicool.com/articles/fqAzqi Java 和 P ...
- jspscriptlet标签
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding= ...
- 【Python图像特征的音乐序列生成】关于数据库到底在哪里下载
毕竟原网站一个是14年前的一个是16年前的…… 1,http://ifdo.ca/~seymour/nottingham/nottingham.html 这个网站可以下载zip包. 2,https:/ ...
- 日常-acm-开灯问题
开灯问题.有n盏灯,编号1-n.第一个人把所有的灯打开,第二个人按下所有编号为二的倍数的开关(全关掉),第三个人按下所有编号为三的倍数的开关,以此类推.一共k个人,问最后开着的灯的编号.输入n和k,输 ...