bzoj 3055礼物运送 floyed + 状压DP
floyed first 设f[i][S]表示取到了S集合中的所有点(不一定是经过的所有点),最后停在了i的最优值。
初始就f[i][{i}] = dis[1][i]
状态转移直接转就好了
f[i][S] + dis[i][j] -> f[j][S + {j}]其中 i 属于 S,1 <= j <= n
设tim[S] = min{f[i][S]}
答案就取到
ans = min{max{tim[S],tim[Cs]}}
#include <map>
#include <queue>
#include <cstdio>
#include <cstring>
#include <climits>
#include <algorithm>
using namespace std;
inline void read(int &x){
x=;char ch;bool flag = false;
while(ch=getchar(),ch<'!');if(ch == '-') ch=getchar(),flag = true;
while(x=*x+ch-'',ch=getchar(),ch>'!');if(flag) x=-x;
}
inline int cat_min(const int &a,const int &b){return a<b ? a:b;}
inline int cat_max(const int &a,const int &b){return a>b ? a:b;}
inline int cat_abs(const int &x){return x < ? -x : x;}
const int maxn = ;
const int maxs = (<<) + ;
int dis[maxn][maxn],n,f[maxn][maxs],tim[maxs];
inline void init(){
memset(dis,0x3f,sizeof dis);
memset(f,0x3f,sizeof f);
memset(tim,0x3f,sizeof tim);
}
void floyed(){
for(int i=;i<=n;++i){
dis[i][i] = ;
for(int j=;j<=n;++j){
if(i == j) continue;
for(int k=;k<=n;++k){
dis[i][j] = cat_min(dis[i][j],
dis[i][k] + dis[k][j]);
}
}
}return;
}
map<int,int>ma;
int main(){ int m;read(n);read(m);
init();
for(int i=,u,v,d;i<=m;++i){
read(u);read(v);read(d);
if(dis[u][v] > d) dis[u][v] = dis[v][u] = d;
}
floyed();
for(int i=;i<=;++i) ma[<<i] = i+;
for(int i=;i<=n;++i) f[i][(<<) | (<<(i-))] = dis[][i];
for(int i=,x=;i<(<<n);x = (++i) ){
while(x){
int p = ma[x&-x];x -=x&-x;
for(int j=;j<=n;++j){
if( f[j][i | (<<(j-))] > f[p][i] + dis[p][j]){
f[j][i | (<<(j-))] = f[p][i] + dis[p][j];
}
}
}
}
for(int i=,x=;i<(<<n);x = (++i) ){
while(x){
int p = ma[x & -x];x -= x&-x;
tim[i]=cat_min(tim[i],f[p][i]);
}
}
int ans = 0x7f7f7f7f;
for(int i=;i<(<<n);++i){
ans = cat_min(ans,cat_max(tim[i],
tim[ | (( ( << n)- )^i) ]));
}printf("%d\n",ans);
//getchar();getchar();
fclose(stdin);fclose(stdout);
return ;
}
bzoj 3055礼物运送 floyed + 状压DP的更多相关文章
- BZOJ.4145.[AMPPZ2014]The Prices(状压DP)
BZOJ 比较裸的状压DP. 刚开始写麻烦惹... \(f[i][s]\)表示考虑了前\(i\)家商店,所买物品状态为\(s\)的最小花费. 可以写求一遍一定去\(i\)商店的\(f[i]\)(\(f ...
- 【FZYZOJ】愚人节礼物 题解(状压DP)
前言:麻麻我会写状压DP了! ---------------------------- 题目描述 愚人节到了!可爱的UOI小朋友要给孩子们送礼物(汗-原题不是可爱的打败图么= =..).在平面直角坐标 ...
- BZOJ.3058.四叶草魔杖(Kruskal 状压DP)
题目链接 \(2^{16}=65536\),可以想到状压DP.但是又有\(\sum A_i\neq 0\)的问题.. 但是\(2^n\)这么小,完全可以枚举所有子集找到\(\sum A_i=0\)的, ...
- bzoj 5299: [Cqoi2018]解锁屏幕 状压dp+二进制
比较简单的状压 dp,令 $f[S][i]$ 表示已经经过的点集为 $S$,且最后一个访问的位置为 $i$ 的方案数. 然后随便转移一下就可以了,可以用 $lowbit$ 来优化一下枚举. code: ...
- BZOJ 4197: [Noi2015]寿司晚宴 状压dp+质因数分解
挺神的一道题 ~ 由于两个人选的数字不能有互质的情况,所以说对于一个质因子来说,如果 1 选了,则 2 不能选任何整除该质因子的数. 然后,我们发现对于 1 ~ 500 的数字来说,只可能有一个大于 ...
- BZOJ 3864 Hero meet devil (状压DP)
最近写状压写的有点多,什么LIS,LCSLIS,LCSLIS,LCS全都用状压写了-这道题就是一道状压LCSLCSLCS 题意 给出一个长度为n(n<=15)n(n<=15)n(n< ...
- bzoj 3195 奇怪的道路 状压dp
看范围,状压没毛病 但是如果随便连的话给开1<<16,乘上n,m就爆了 所以规定转移时只向回连边 于是想状态数组:f[i][j]表示到i这里i前K位的状态为j(表示奇偶) 发现有条数限制, ...
- bzoj 1556: 墓地秘密【状压dp+spfa】
显然是状压,显然不可能把所有格子压起来 仔细观察发现只有机关周围的四个格子有用以及起点,所以我们用spfa处理出这些格子两两之间的距离(注意细节--这里写挂了好几次),然后设f[s][i]为碰完的机关 ...
- BZOJ 3870: Our happy ending( 状压dp )
dp(i, s)表示考虑了前i个数后, 能取到的数的集合为s时的方案数.对于1~min(L, K)枚举更新, 剩下的直接乘就好了. 复杂度O(T*K*2^N)...好像有点大, 但是可以AC.... ...
随机推荐
- iOS 常用三方类库整理
iOS 常用三方类库整理 1:基于响应式编程思想的oc 地址:https://github.com/ReactiveCocoa/ReactiveCocoa 2:hud提示框 地址:https://gi ...
- JVM-操作码助记符
整理如下,用于以后查找: Opcode Mnemonics Note Constants 0x00 nop 无动作 0x01 aconst_null 把 null 推到操作数栈 0x02 iconst ...
- Perl 脚本报Can't locate Mail/Sender.pm 解决办法
在新的Linux Server(Red Hat Enterprise Linux Server release 5.7 (Tikanga))上配置磁盘空间告警的perl脚本后,测试时报如下错误 ...
- SQL Server 中VARCHAR(MAX)变量赋值引起的性能问题。
案例环境: 操作系统版本 : Windows Server 2008 R2 Standard SP1 数据库版本 : Microsoft SQL Server 2012 (SP1) - 11. ...
- BCP笔记整理(二)
BCP的基础用法可以参考上一篇:http://www.cnblogs.com/Gin-23333/p/5489889.html 这篇是补充一些有可能会用到,但是出场几率并不算大的几个参数 1.首先是 ...
- C# 实现酒店房态图
酒店管理系统最重要和实用的是能够及时.一目了然的反应房间状态的房态图,之前在开发一个的酒店管理系统中做了一个还算实用的房态图,现在分享下: 鼠标移到每个房间上面,可显示提示信息: 还可以自定义设置不同 ...
- strcpy 函数的实现
原型声明:extern char *strcpy(char *dest,const char *src); 头文件:string.h 功能:把从src地址开始且含有‘\0’结束符的字符串赋值到以d ...
- 3. Python 简介
3. Python 简介 下面的例子中,输入和输出分别由大于号和句号提示符 ( >>> 和 ... ) 标注:如果想重现这些例子,就要在解释器的提示符后,输入 (提示符后面的) 那些 ...
- jquery——移动端滚动条插件iScroll.js
官网:http://cubiq.org/iscroll-5 demo: 滚动刷新:http://cubiq.org/dropbox/iscroll4/examples/pull-to-refresh/ ...
- 数-模(D/A)转换器
将实现数字信号到模拟信号的转换电流称为数模(D/A)转换器,简称为DAC(Digital - Analog Convert). 目前常见的D/A转化器中,有:权电阻网络D/A转换器.倒T型电阻网络D/ ...