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:每条线段与前一条线段之间的长度的比例和夹角不会因平移.旋转.放缩而改变,所以将每条轨迹改为比例和夹角的序列,复制一份 ...
随机推荐
- HTTP1.1中CHUNKED编码解析(转载)
HTTP1.1中CHUNKED编码解析 一般HTTP通信时,会使用Content-Length头信息性来通知用户代理(通常意义上是浏览器)服务器发送的文档内容长度,该头信息定义于HTTP1.0协议RF ...
- Spring事务的5种隔离级别
概述:isolation设定事务的隔离级别,事务管理器根据它来控制另外一个事务可以看到本事务内的哪些数据. 定义的5个不同的事务隔离级别: DEFAULT:默认的隔离级别,使用数据库默认的事务隔离级别 ...
- virtualapk爬坑心得
1.宿主和插件的工程build.gradle必须是 com.android.tools.build:gradle:2.1.3 gradle-wrapper 必须是 gradle-2.14.1-all ...
- Android商城开发系列(六)——使用 OkHttpUtils 请求网络 + 使用 fastjson解析数据
OkHttp是Google推荐使用的一个开源的网络请求框架,Android开发中涉及到网络请求和接口调用现在大部分都是使用OkHttp,网上已经有不少人针对OkHttp进行了封装,这里推荐一下鸿洋大神 ...
- MySQL基础教程——创建数据库并插入数据
本节将介绍 MySQL 新建数据库,新建表,插入数据以及基本数据类型的相关知识.本节实验将创建一个名为 mysql_shiyan 的数据库,其中有两张表 employee和 department. 1 ...
- 万恶之源 Python
学IT真他妈难受 从早上起来坐到晚上 一天对着电脑啪啪啪
- JavaScript中数组的使用
---恢复内容开始--- 创建数组 1,通过 var arr1 = [1,2,3] 2通过使用 var arr2 = new Array(1,2,3) 在这里创造的数组实际上都是一个对象,然后把对象的 ...
- vc文件操作汇总—支持wince
一.判断文件及文件夹是否存在 // 判断文件是否存在 BOOL IsFileExist(const CString& csFile) { DWORD dwAttrib = GetFileAtt ...
- MySQL左右连接查询中的NULL的数据筛选问题
这里使用左连接为例子,对于左连接是将左边表的数据显示,右边表中如果没有对应的数据则使用null填充. game表: game_type表: SELECT g.name,g.type_id,t.type ...
- Voyager的数据库操作与Bread Builder,解决国内打开网速超级慢的问题
Products表的创建: Bread Builder 伟大的XX封了谷哥,所以有关网站实在是打不开,正准备放弃的时候,突然发现问题了,对就是这个网站ajax.googleapis.com,由于调用的 ...