2018.11.06 bzoj1097: [POI2007]旅游景点atr(最短路+状压dp)
传送门
预处理出不能在每个点停留之后才停留的点的状态。
对kkk个点都跑一次最短路存下来之后只需要简单状压一下就能过了吐槽原题空间64MB蒟蒻无能为力
然后用fillfillfill赋极大值的时候当memsetmemsetmemset用赋成了很小的值导致挑了一个晚上都不知道哪里错了。
于是f[i][j]f[i][j]f[i][j]表示现在停留在iii这个点并且已经停留过的状态为jjj,随便转移一波就做完了。
代码:
#include<bits/stdc++.h>
using namespace std;
inline int read(){
int ans=0;
char ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
return ans;
}
const int N=2e4+5,M=2e5+5,K=22;
int n,m,k,up,dis[K][N],first[N],cnt=0,f[K][1<<(K-1)],ban[K];
bool vis[N];
struct edge{int v,w,next;}e[M<<1];
inline void add(int u,int v,int w){e[++cnt].v=v,e[cnt].w=w,e[cnt].next=first[u],first[u]=cnt;}
inline void dijkstra(int s){
fill(dis[s],dis[s]+n+1,0x3f3f3f3f),fill(vis,vis+n+1,0);
priority_queue<pair<int,int> >q;
q.push(make_pair(dis[s][s]=0,s));
while(!q.empty()){
int x=q.top().second;
q.pop();
if(vis[x])continue;
vis[x]=1;
for(int i=first[x];~i;i=e[i].next){
int v=e[i].v;
if(dis[s][v]>dis[s][x]+e[i].w)dis[s][v]=dis[s][x]+e[i].w,q.push(make_pair(-dis[s][v],v));
}
}
}
inline int dfs(int pos,int sta){
if(f[pos][sta])return f[pos][sta];
if(sta==up)return f[pos][sta]=dis[pos][n-1];
f[pos][sta]=0x3f3f3f3f;
for(int i=1;i<=k;++i)if((sta&ban[i])==ban[i])f[pos][sta]=min(f[pos][sta],dfs(i,sta|(1<<(i-1)))+dis[pos][i]);
return f[pos][sta];
}
int main(){
memset(first,-1,sizeof(first)),n=read(),m=read(),k=read(),up=(1<<k)-1;
for(int i=1,u,v,w;i<=m;++i)u=read()-1,v=read()-1,w=read(),add(u,v,w),add(v,u,w);
for(int i=read(),u,v;i;--i)u=read()-1,v=read()-1,ban[v]|=1<<(u-1);
for(int i=0;i<=k;++i)dijkstra(i);
cout<<dfs(0,0);
return 0;
}
2018.11.06 bzoj1097: [POI2007]旅游景点atr(最短路+状压dp)的更多相关文章
- 【BZOJ1097】[POI2007]旅游景点atr 最短路+状压DP
[BZOJ1097][POI2007]旅游景点atr Description FGD想从成都去上海旅游.在旅途中他希望经过一些城市并在那里欣赏风景,品尝风味小吃或者做其他的有趣的事情.经过这些城市的顺 ...
- BZOJ 1097: [POI2007]旅游景点atr( 最短路 + 状压dp )
先最短路预处理, 然后状压就行了 -------------------------------------------------------------------------- #include ...
- 【BZOJ】1097: [POI2007]旅游景点atr(spfa+状压dp)
http://www.lydsy.com/JudgeOnline/problem.php?id=1097 首先还是我很sb....想到了分层图想不到怎么串起来,,,以为用拓扑序搞转移,,后来感到不行. ...
- BZOJ1097: [POI2007]旅游景点atr
..k次最短路后,考虑如何满足先走一些点 用状压dp,每一个点考虑它所需要经过的点a[i],当当前走过的点包含a[i]时,i 这个点才可以到达. 写的时候用记忆化搜索. #include<bit ...
- 【BZOJ-1097】旅游景点atr SPFA + 状压DP
1097: [POI2007]旅游景点atr Time Limit: 30 Sec Memory Limit: 357 MBSubmit: 1531 Solved: 352[Submit][Sta ...
- bzoj [POI2007]旅游景点atr 状态压缩+Dij
[POI2007]旅游景点atr Time Limit: 30 Sec Memory Limit: 357 MBSubmit: 2258 Solved: 595[Submit][Status][D ...
- 【bzoj1097】[POI2007]旅游景点atr 状压dp+堆优化Dijkstra
题目描述 FGD想从成都去上海旅游.在旅途中他希望经过一些城市并在那里欣赏风景,品尝风味小吃或者做其他的有趣的事情.经过这些城市的顺序不是完全随意的,比如说FGD不希望在刚吃过一顿大餐之后立刻去下一个 ...
- [POI2007]旅游景点atr
Description FGD想从成都去上海旅游.在旅途中他希望经过一些城市并在那里欣赏风景,品尝风味小吃或者做其他的有趣的事情.经过这些城市的顺序不是完全随意的,比如说FGD不希望在刚吃过一顿大餐之 ...
- [POI2007]旅游景点atr BZOJ1097
分析: 我们可以考虑,因为我们必须经过这些节点,那么我们可以将它状压,并且我们因为可以重复走,只是要求停顿前后,不要求遍历前后,那么我们之间存一下点与点之间的最短路,之后每次转移一下就可以了. f[i ...
随机推荐
- WIN7,安装所以软件都提示error writing temporary file
执行: icacls C:\Users\Administrator\Desktop /setintegritylevel H
- redis(三)积累-基本的取值和设值
1. 先把redis的连接池拿出来, JedisPool pool=new JedisPool(new JedisPoolConfig(),"127.0.0.1") Jedis ...
- Java 微服务框架选型 Dubbo 和 Spring Cloud
微服务(Microservices)是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成.系统中的各个微服务可被独立部署,各个微服务之间是松耦合的.每个微服务仅关注于完成一件任务并很好地完成该任 ...
- Django xadmin后台添加富文本编辑器UEditor的用法
效果图: 步骤: 1.利用命令:pip install DjangoUeditor,安装DjangoUeditor,但由于DjangoUeditor没有python3版本的,从的Github上把修改好 ...
- tableViewCell上的定时器拖动阻塞
if (_timer == nil) { _timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@sele ...
- Eclipse插件安装常见方法
Eclipse插件的安装方法大体有以下几种: 第一种:直接复制法 假设Eclipse的安装目录在C:\eclipse,解压下载的eclipse 插件或者安装eclipse 插件到指定目录文件夹,打开安 ...
- vue-router2
六,导航钩子 导航钩子函数主要是在导航跳转的时候做一些操作,比如跳转页面之前,进行判断 进而选择跳转到哪里 钩子函数根据生效范围根据其生效范围可以分为全局钩子函数,路由独享钩子函数 和 组件钩子函数. ...
- Sqlite文件在ubunut的查看
1. How to list the tables in a SQLite database file that was opened with ATTACH? The .tables, and .s ...
- 基础数据类型补充,及capy daty7
1,基础数据类型,总结补充. int:bit_lenth() str: captilze() 首字母大写,其余小写. upper() 全大写. lower() 全小写. find() 通过元素找索引, ...
- c# sharpsvn 客户端开发总结
判断文件夹是否是 working copy 工作副本两个方法 if (!IsWorkingCopy(localPath))//查看某目录是否是受svn管理的状态, 即是否为工作副本 { notiny ...