luogu P4294 [WC2008]游览计划
LINK:游览计划
斯坦纳树例题。
斯坦纳树是这样一类问题:带权无向图上有K个关键点 求出包含这K个点的最小生成树。
也就是说 求最小生成树 但是 并不是整张图 仅限于K个点。
可以发现我们利用克鲁斯卡尔或者prim算法 求的都是整张图的最小生成树。
所以可以发现 这个斯坦纳树问题 其实是一个np困难问题 不存在多项式的时间复杂度。
可以考虑搜索或者状压了。
这道题共有100个点 其中有10个关键点 我们首选状压dp.
有状态 f[i][j][k]表示到了(i,j)这个点了 所经过的点集为k的最小代价。
可以发现我们的i,j 这个点可以先往左再往右走 什么的所以有一个比较显然的转移。
f[i][j][k]=min{f[i][j][s]+f[i][j][s^k]-val[i][j]};
还有一个转移 如果当前点 跑到其他地方了f[x][y][k]=min{f[i][j][k]+val[x][y]};
两个转移就完了。其中第一个状态转移方程 我们可以直接枚举子集来做。
第二个考虑跑spfa来进行迭代dp.
可以发现是可以跑dij 可能dij在稀疏图中并不优秀?我觉着没有spfa快。
const int MAXN=11;
int n,m,cnt,l,r;
int f[MAXN][MAXN][1<<10];
int a[MAXN][MAXN],vis[MAXN][MAXN];
pii pre[MAXN][MAXN][1<<10];
pii q[10010];
int dx[5]={0,0,0,1,-1};
int dy[5]={0,1,-1,0,0};
inline void spfa(int s)
{
while(++l<=r)
{
pii w=q[l];vis[w.F][w.S]=0;
rep(1,4,i)
{
int xx=w.F+dx[i];
int yy=w.S+dy[i];
if(xx<1||yy<1||xx>n||yy>m)continue;
if(f[xx][yy][s]>f[w.F][w.S][s]+a[xx][yy])
{
f[xx][yy][s]=f[w.F][w.S][s]+a[xx][yy];
pre[xx][yy][s]=w;
if(!vis[xx][yy])vis[xx][yy]=1,q[++r]=mk(xx,yy);
}
}
}
}
inline void get_path(int x,int y,int s)
{
vis[x][y]=1;
pii w=pre[x][y][s];
if(!w.F&&!w.S)return;
if(!w.F)get_path(x,y,w.S),get_path(x,y,w.S^s);
else get_path(w.F,w.S,s);
}
int main()
{
freopen("1.in","r",stdin);
memset(f,0x3f,sizeof(f));
get(n);get(m);int s1,s2;
rep(1,n,i)rep(1,m,j)
{
get(a[i][j]);
if(!a[i][j])s1=i,s2=j,++cnt,f[i][j][1<<(cnt-1)]=0;
}
int maxx=(1<<cnt)-1;
rep(1,maxx,i)
{
l=r=0;
for(int x=1;x<=n;++x)
for(int y=1;y<=m;++y)
{
for(int s=i;s;s=i&(s-1))
if(f[x][y][s]+f[x][y][s^i]-a[x][y]<f[x][y][i])
f[x][y][i]=f[x][y][s]+f[x][y][s^i]-a[x][y],pre[x][y][i]=mk(0,s);
if(f[x][y][i]<INF)
{
q[++r]=mk(x,y);
vis[x][y]=1;
}
}
spfa(i);
}
put(f[s1][s2][maxx]);
get_path(s1,s2,maxx);
rep(1,n,i)
{
rep(1,m,j)
{
if(!a[i][j])putchar('x');
else putchar(vis[i][j]?'o':'_');
}
puts("");
}
return 0;
}
luogu P4294 [WC2008]游览计划的更多相关文章
- bzoj2595 / P4294 [WC2008]游览计划
P4294 [WC2008]游览计划 斯坦纳树 斯坦纳树,是一种神奇的树.它支持在一个连通图上求包含若干个选定点的最小生成树. 前置算法:spfa+状压dp+dfs(大雾) 我们设$f[o][P]$为 ...
- Luogu 4294 [WC2008]游览计划 | 斯坦纳树
题目链接 Luogu 4294 (我做这道题的时候BZOJ全站的SPJ都炸了 提交秒WA 幸好有洛谷) 题解 这道题是[斯坦纳树]的经典例题.斯坦纳树是这样一类问题:带边权无向图上有几个(一般约10个 ...
- 洛谷 P4294 [WC2008]游览计划
题目链接 不是很会呢,但似乎抄了题解后有点明白了 sol:状态DP显然,其实是要构建一棵最小生成树一样的东西,我自己的理解(可能不是很对哦希望多多指教)f[x][y][zt]就是到x,y这个点,状态为 ...
- P4294 [WC2008]游览计划
传送门 斯坦纳树 给一个联通图,求 $k$ 个关键点联通的最小生成树权值 设 $f[o][i]$ 表示当前关键点选择状态为 $o$ ,以点 $i$ 为根的树的最小权值 初始 $f[1<<( ...
- P4294 [WC2008]游览计划 (斯坦纳树)
题目链接 差不多是斯坦纳树裸题,不过边权化成了点权,这样在合并两棵子树时需要去掉根结点的权值,防止重复. 题目还要求输出解,只要在转移时记录下路径,然后dfs一遍就好了. #include<bi ...
- BZOJ_2595_[Wc2008]游览计划_斯坦纳树
BZOJ_2595_[Wc2008]游览计划_斯坦纳树 题意: 分析: 斯坦纳树裸题,有几个需要注意的地方 给出矩阵,不用自己建图,但枚举子集转移时会算两遍,需要减去当前点的权值 方案记录比较麻烦,两 ...
- [WC2008]游览计划 解题报告
[WC2008]游览计划 斯坦纳树板子题,其实就是状压dp 令\(dp_{i,s}\)表示任意点\(i\)联通关键点集合\(s\)的最小代价 然后有转移 \[ dp_{i,S}=\min_{T\in ...
- 【BZOJ2595】 [Wc2008]游览计划
BZOJ2595 [Wc2008]游览计划 Solution 考虑这是一个最小费用连通性的问题,既然大家都说这是什么斯坦纳树那就是的吧... 所以我们肯定可以这样设一个dp状态: \(dp_{i,j, ...
- 【BZOJ2595】[Wc2008]游览计划 斯坦纳树
[BZOJ2595][Wc2008]游览计划 Description Input 第一行有两个整数,N和 M,描述方块的数目. 接下来 N行, 每行有 M 个非负整数, 如果该整数为 0, 则该方块为 ...
随机推荐
- RocketMQ延迟消息的代码实战及原理分析
RocketMQ简介 RocketMQ是一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的.高可靠.万亿级容量.灵活可伸缩的消息发布与订阅服务. 它前身是MetaQ,是阿里基于Kafka ...
- DLL注入之修改PE静态注入
DLL注入之修改PE静态注入 0x00 前言 我们要注入的的力量功能是下载baidu首页数据.代码如下: #include "stdio.h" #include"stdi ...
- 2018年BRATS 肿瘤分割挑战赛第三名分割方案One-pass Multi-task Networks with Cross-task Guided Attention for Brain Tumor Segmentation
首先说一下我对这个方案的看法,相比第一名与第二名的方案,这个方案的分割方法确实复杂的多,原论文是发表在MICCAI,后来砖投到IEEE image processing(SCI 1区),总体感觉给人一 ...
- CVE-2020-5902 简单复现
这几天通报了f5的一个漏洞,想着先弄个环境保存着,说不定后面就用到了.. 1.漏洞描述 近日,F5官方发布公告,修复了流量管理用户界面(TMUI)中存在的一个远程代码执行漏洞(CVE-2020-5 ...
- Spring Boot 2 实战:常用读取配置的方式
1. 前言 在Spring Boot项目中我们经常需要读取application.yml配置文件的自定义配置,今天就来罗列一下从yaml读取配置文件的一些常用手段和方法. 2. 使用@Value注解 ...
- android手机的微信H5弹出的软键盘挡住了文本框,如何解决?
window.addEventListener("resize", function () { if (document.activeElement.tagName == &quo ...
- 数据可视化之分析篇(四)PowerBI分析模型:产品关联度分析
https://zhuanlan.zhihu.com/p/64510355 逛超市的时候,面对货架上琳琅满目的商品,你会觉得这些商品的摆放,或者不同品类的货架分布是随机排列的吗,当然不是. 应该都听说 ...
- 数据源管理 | 搜索引擎框架,ElasticSearch集群模式
本文源码:GitHub·点这里 || GitEE·点这里 一.集群环境搭建 1.环境概览 ES版本6.3.2,集群名称esmaster,虚拟机centos7. 服务群 角色划分 说明 en-maste ...
- .NET Core微服务开发服务间调用篇-GRPC
在单体应用中,相互调用都是在一个进程内部调用,也就是说调用发生在本机内部,因此也被叫做本地方法调用:在微服务中,服务之间调用就变得比较复杂,需要跨网络调用,他们之间的调用相对于与本地方法调用,可称为远 ...
- Vue全家桶之一Vue(基础知识篇)
全家桶:Vue本身.状态管理.路由. 异步组件: