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.... ...
随机推荐
- svn的使用(转载)
这里只介绍使用CornerStone来使用SVN. CornerStone是Mac OS X系统下非常好用的一款svn工具,当然还有Versions也是可以用的,但是使用起来不如CornerStone ...
- (二)Maven的安装与环境配置
想要安装 Apache Maven在Windows 系统上, 需要下载 Maven 的 zip 文件,并将其解压到你想安装的目录,并配置 Windows 环境变量. 所需工具 : 1.JDK 2.Ma ...
- sizeof与strlen的区别
1 sizeof是操作符,而strlen是库函数: 2 sizeof的参数可以为任意变量或类型,而strlen必须以char*做参数,且字符串必须以‘/0’结尾: 3 数组名用作sizeof参数时不会 ...
- CSS3 text-shadow
<!DOCTYPE html > <html > <head> <meta charset="utf-8"> <title&g ...
- Crontab定时任务配置
CRONTAB概念/介绍 crontab命令用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行. cron 系统调度进程. 可以使用它在 ...
- [MySQL Reference Manual] 8 优化
8.优化 8.优化 8.1 优化概述 8.2 优化SQL语句 8.2.1 优化SELECT语句 8.2.1.1 SELECT语句的速度 8.2.1.2 WHERE子句优化 8.2.1.3 Range优 ...
- LightMysql:为方便操作MySQL而封装的Python类
原文链接:http://www.danfengcao.info/python/2015/12/26/lightweight-python-mysql-class.html mysqldb是Python ...
- Python写地铁的到站的原理简易版
Python地铁的到站流程及原理(个人理解) 今天坐地铁看着站牌就莫名的想如果用Python写其工作原理 是不是很简单就小试牛刀了下大佬们勿喷纯属小弟个人理解 首先来看看地铁上显示的站牌如下: 就想这 ...
- charles 抓取eclipse中的请求
charles抓取eclipse中的请求 有时候,想要监测eclipse中发送get获取post请求,一样可以使用代理方式: 1.eclipse代码设置 代码中添加,可以就写在主函数中,然后再调用请求 ...
- Windows 安装Kafka
Windows 7 安装Apache kafka_2.11-0.9.0.1 下载所需文件 Zookeeper: http://www.apache.org/dyn/closer.cgi/zoo ...