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:每条线段与前一条线段之间的长度的比例和夹角不会因平移.旋转.放缩而改变,所以将每条轨迹改为比例和夹角的序列,复制一份 ...
随机推荐
- 前端开发如何做好SEO优化的工作
前端开发工程师不仅需要要跟视觉设计师.交互式设计师配合,完美还原设计图稿,编写兼容各大浏览器.加载速度快.用户体验好的页面.现在还需要跟SEO人员配合,调整页面的代码结构和标签. 一些成熟的平台,在开 ...
- WebStorm技巧-集成命令行工具插件
打开菜单项 File -> Settings- 搜索插件 CMD Support,并安装. 重启WebStorm,在你的项目中新建一个Cmd script 文件,命名为build.cmd ...
- SpringBoot 2.x (14):WebFlux响应式编程
响应式编程生活案例: 传统形式: 一群人去餐厅吃饭,顾客1找服务员点餐,服务员把订单交给后台厨师,然后服务员等待, 当后台厨师做好饭,交给服务员,经过服务员再交给顾客1,依此类推,该服务员再招待顾客2 ...
- SpringBoot 2.x (13):整合ActiveMQ
ActiveMQ5.x不多做介绍了,主要是SpringBoot的整合 特点: 1)支持来自Java,C,C ++,C#,Ruby,Perl,Python,PHP的各种跨语言客户端和协议 2)支持许多高 ...
- vue2.0:(九)、外卖App弹窗部分星星评分
本篇是星星评分部分,先上代码: 1.header.vue: <template> <transition name="fade"> & ...
- 本号讯 | 微软被 Forrester 评为销售服务自动化解决方案领导者
2017年第二季度独立研究机构 Forrester Research 在最新发布的 The Forrester Wave™: 销售服务自动化(Sales Force Automation Soluti ...
- Windows Azure 配置Active Directory 主机(2)
前一篇概况给大家介绍了,在云端部署一台DC 需要满足一些条件,接下来进入正题,云端VM安装域控制器具体步骤. 步骤1 :验证 主DC 的静态 IP 地址 1.登录到 Corp 网络上的 主DC. 2. ...
- 洛谷 P2424 约数和
题目背景 Smart最近沉迷于对约数的研究中. 题目描述 对于一个数X,函数f(X)表示X所有约数的和.例如:f(6)=1+2+3+6=12.对于一个X,Smart可以很快的算出f(X).现在的问题是 ...
- 如何在SAP云平台的Cloud Foundry环境下添加新的Service(服务)
我想在SAP云平台的Cloud Foundry环境下使用MongoDB的服务,但是我在Service Marketplace上找不到这个服务. cf marketplace返回的结果也没有. 解决方案 ...
- [学习总结] python语言学习总结 (一)
还是不多说话了.. 1.eval函数 用法:eval(expression, globals=None, locals=None) 解释:将字符串str当成有效的表达式来求值并返回计算结果. 就是可以 ...