2595

思路:

  状压DP+spfa转移+dfs输出路径;

  或者,斯坦纳树算法模板;

来,上代码:

#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; #define INF 0x7ffffff struct NodeType {
int x,y,s;
};
struct NodeType pre[][][]; const int dx[]={,-,,,};
const int dy[]={,,,,-}; int n,m,map[][],num,bi[],all,dp[][][],ans; bool if_[][],cho[][]; queue<NodeType>que; inline void in(int &now)
{
char Cget=getchar();now=;
while(Cget>''||Cget<'') Cget=getchar();
while(Cget>=''&&Cget<='')
{
now=now*+Cget-'';
Cget=getchar();
}
} void read()
{
in(n),in(m),bi[]=;
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
in(map[i][j]);
if(!map[i][j]) num++;
}
}
for(int i=;i<=num;i++) bi[i]=bi[i-]<<;
all=bi[num]-;
} void spfa(int f)
{
while(!que.empty())
{
NodeType now=que.front();que.pop(),if_[now.x][now.y]=false;
for(int i=;i<=;i++)
{
int x=now.x+dx[i],y=now.y+dy[i];
if(x>&&x<=n&&y>&&y<=m)
{
if(dp[x][y][f]>dp[now.x][now.y][f]+map[x][y])
{
dp[x][y][f]=dp[now.x][now.y][f]+map[x][y];
pre[x][y][f]=(NodeType){now.x,now.y,now.s};
if(!if_[x][y]) que.push((NodeType){x,y,f}),if_[x][y]=true;
}
}
}
}
} void dfs(int x,int y,int s)
{
if(x>INF||pre[x][y][s].s==) return ;
cho[x][y]=true;
dfs(pre[x][y][s].x,pre[x][y][s].y,pre[x][y][s].s);
if(x==pre[x][y][s].x&&y==pre[x][y][s].y) dfs(x,y,s-pre[x][y][s].s);
} void solve()
{
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
for(int v=;v<=all;v++) dp[i][j][v]=INF;
}
}
int F=;
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
if(!map[i][j]) dp[i][j][bi[F++]]=;
}
}
for(int S=;S<=all;S++)
{
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
for(int s=S&(S-);s;s=S&(s-))
{
int tmp=dp[i][j][s]+dp[i][j][S-s]-map[i][j];
if(tmp<dp[i][j][S])
{
dp[i][j][S]=tmp;
pre[i][j][S]=(NodeType){i,j,s};
}
}
if(dp[i][j][S]<INF) que.push((NodeType){i,j,S}),if_[i][j]=true;
}
}
spfa(S);
}
int ex,ey;
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
if(!map[i][j])
{
ex=i,ey=j,ans=dp[i][j][all];
break;
}
}
}
dfs(ex,ey,all);
} void print()
{
printf("%d\n",ans);
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
if(!map[i][j]) putchar('x');
else if(cho[i][j]) putchar('o');
else putchar('_');
}
putchar('\n');
}
} int main()
{
read();
solve();
print();
return ;
}

AC日记——[Wc2008]游览计划 bzoj 2595的更多相关文章

  1. 【BZOJ 2595】2595: [Wc2008]游览计划 (状压DP+spfa,斯坦纳树?)

    2595: [Wc2008]游览计划 Time Limit: 10 Sec  Memory Limit: 256 MBSec  Special JudgeSubmit: 1572  Solved: 7 ...

  2. 【LG4294】[WC2008]游览计划

    [LG4294][WC2008]游览计划 题面 洛谷 bzoj 题解 斯坦纳树板子题. 斯坦纳树的总结先留个坑. 代码 #include <iostream> #include <c ...

  3. BZOJ_2595_[Wc2008]游览计划_斯坦纳树

    BZOJ_2595_[Wc2008]游览计划_斯坦纳树 题意: 分析: 斯坦纳树裸题,有几个需要注意的地方 给出矩阵,不用自己建图,但枚举子集转移时会算两遍,需要减去当前点的权值 方案记录比较麻烦,两 ...

  4. [WC2008]游览计划 解题报告

    [WC2008]游览计划 斯坦纳树板子题,其实就是状压dp 令\(dp_{i,s}\)表示任意点\(i\)联通关键点集合\(s\)的最小代价 然后有转移 \[ dp_{i,S}=\min_{T\in ...

  5. bzoj2595 / P4294 [WC2008]游览计划

    P4294 [WC2008]游览计划 斯坦纳树 斯坦纳树,是一种神奇的树.它支持在一个连通图上求包含若干个选定点的最小生成树. 前置算法:spfa+状压dp+dfs(大雾) 我们设$f[o][P]$为 ...

  6. 【BZOJ2595】 [Wc2008]游览计划

    BZOJ2595 [Wc2008]游览计划 Solution 考虑这是一个最小费用连通性的问题,既然大家都说这是什么斯坦纳树那就是的吧... 所以我们肯定可以这样设一个dp状态: \(dp_{i,j, ...

  7. 【BZOJ2595】[Wc2008]游览计划 斯坦纳树

    [BZOJ2595][Wc2008]游览计划 Description Input 第一行有两个整数,N和 M,描述方块的数目. 接下来 N行, 每行有 M 个非负整数, 如果该整数为 0, 则该方块为 ...

  8. BZOJ2595 Wc2008 游览计划 【斯坦纳树】【状压DP】*

    BZOJ2595 Wc2008 游览计划 Description Input 第一行有两个整数,N和 M,描述方块的数目. 接下来 N行, 每行有 M 个非负整数, 如果该整数为 0, 则该方块为一个 ...

  9. [bzoj2595][WC2008]游览计划/[bzoj5180][Baltic2016]Cities_斯坦纳树

    游览计划 bzoj-2595 wc-2008 题目大意:题目链接.题目连接. 注释:略. 想法:裸题求斯坦纳树. 斯坦纳树有两种转移方式,设$f[s][i]$表示联通状态为$s$,以$i$为根的最小代 ...

随机推荐

  1. Reverse Word in a String(翻转字符串)&字符串最后一个单词的长度

    1.题目: Given an input string, reverse the string word by word. For example,Given s = "the sky is ...

  2. iOS笔记057 - UI总结03

    控制器的父子关系 1.控制器父子关系的建立原则        如果2个控制器的view是父子关系(不管是直接还是间接的父子关系),那么这2个控制器也应该为父子关系 [self.view addSubv ...

  3. ironic baremetal node rescue/unrescue mode

    环境ironic-api ironic-conductor,ironicclient均升级为Queens版本 官网说明API版本为1.38才支持rescue/unrescue,所以修改下openrc文 ...

  4. Spring 学习笔记(五)—— Bean之间的关系、作用域、自动装配

    继承 Spring提供了配置信息的继承机制,可以通过为<bean>元素指定parent值重用已有的<bean>元素的配置信息. <?xml version="1 ...

  5. Vue.js入门(一)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <meta htt ...

  6. EF异常:对一个或多个实体的验证失败

    try catch 捕获到错误.然后看.找到哪个是没填的..... 我是这种错误.

  7. Nginx出现500错误解决办法

    查看错误日志D:\nginx\logs\error.log 得知:Nginx配置文件中会将路径中的 \t 默认转义成 空格 改为双斜杠就可以了

  8. 分享下自己一直用的.NET SQLSERVER 封装类下自己写的DataHelper 操作类

    一,概述: 这个DataHelper 类是基于我上个博客里发的SQLDataAccess 这个类做的一个简单的封装,为了结合自己的实体类和数据操作而产生的. 这里面用了  属性类,反射.还有 数据类型 ...

  9. HDU 6165 FFF at Valentine(Tarjan缩点+拓扑排序)

    FFF at Valentine Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  10. Unity Shader-GodRay,体积光(BillBoard,Volume Shadow,Raidal Blur,Ray-Marching)

    好久没有更新博客了,经历了不少事情,好在最近回归了一点正轨,决定继续Unity Shader的学习之路.作为回归的第一篇,来玩一个比较酷炫的效果(当然废话也比较多),一般称之为GodRay(圣光),也 ...