题目链接:戳我

非常抱歉,菜鸡风浔凌又来水蓝题了qwq

看到题解上写双向搜索???什么鬼.......

看到数据范围特别小,直接划分二分图,两个点之间连接容量为1,费用为曼哈顿距离的边,跑费用流即可。

什么?你问我那个不能移动到有玩具的格子的限制?

不用管了啦,因为费用流会给你跑费用最小的,也就是每个点都会找到最近的那个点,不会有其他点和它抢位置的。

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#define S 0
#define T tot1+tot2+1
#define MAXN 110
using namespace std;
int n,m,tot1,tot2,t=1,c,f;
int pre_e[MAXN],pre_v[MAXN];
int a[MAXN][MAXN],b[MAXN][MAXN],head[MAXN],dis[MAXN],done[MAXN];
int move_x[4]={0,0,1,-1},move_y[4]={1,-1,0,0};
struct Node{int x,y,id;}node1[MAXN],node2[MAXN];
struct Edge{int nxt,to,dis,cost;}edge[100010];
inline void add(int from,int to,int dis,int cost)
{edge[++t].nxt=head[from],edge[t].to=to,edge[t].dis=dis,edge[t].cost=cost,head[from]=t;edge[++t].nxt=head[to],edge[t].to=from,edge[t].dis=0,edge[t].cost=-cost,head[to]=t;
}
inline bool spfa()
{queue<int>q;memset(dis,0x3f,sizeof(dis));memset(done,0,sizeof(done));q.push(S);done[S]=1;dis[S]=0;while(!q.empty()){int u=q.front();q.pop();done[u]=0;for(int i=head[u];i;i=edge[i].nxt){int v=edge[i].to;if(edge[i].dis&&dis[u]+edge[i].cost<dis[v]){dis[v]=dis[u]+edge[i].cost;pre_e[v]=i,pre_v[v]=u;if(!done[v])q.push(v),done[v]=1;}}}if(dis[T]>=0x3f3f3f3f) return false;int flow=0x3f3f3f3f;for(int i=T;i!=S;i=pre_v[i]) flow=min(flow,edge[pre_e[i]].dis);for(int i=T;i!=S;i=pre_v[i]) edge[pre_e[i]].dis-=flow,edge[pre_e[i]^1].dis+=flow;f+=flow;c+=flow*dis[T];return true;
}
int main()
{#ifndef ONLINE_JUDGEfreopen("ce.in","r",stdin);#endiffor(int i=1;i<=4;i++)for(int j=1;j<=4;j++){scanf("%1d",&a[i][j]);if(a[i][j]==1) node1[++tot1]=(Node){i,j,tot1};}for(int i=1;i<=4;i++)for(int j=1;j<=4;j++){scanf("%1d",&b[i][j]);if(b[i][j]==1) node2[++tot2]=(Node){i,j,tot2};}// printf("tot1=%d tot2=%d\n",tot1,tot2);for(int i=1;i<=tot1;i++) add(S,node1[i].id,1,0);for(int i=1;i<=tot2;i++) add(node2[i].id+tot1,T,1,0);for(int i=1;i<=tot1;i++){for(int j=1;j<=tot2;j++){add(node1[i].id,node2[j].id+tot1,1,abs(node1[i].x-node2[j].x)+abs(node1[i].y-node2[j].y));}}while(spfa());printf("%d\n",c);return 0;
}

转载于:https://www.cnblogs.com/fengxunling/p/10909267.html

HAOI2008 移动玩具相关推荐

  1. bzoj 1054: [HAOI2008]移动玩具.cpp

    1054: [HAOI2008]移动玩具 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2260  Solved: 1254 [Submit][St ...

  2. [bzoj1054][HAOI2008]移动玩具

    题意:在一个4*4的方框内摆放了若干个相同的玩具,某人想将这些玩具重新摆放成为他心中理想的状态,规定移动 时只能将玩具向上下左右四个方向移动,并且移动的位置不能有玩具,请你用最少的移动次数将初始的玩具 ...

  3. [HAOI2008]移动玩具

    这又是一道神奇的搜索题...只要记录每种状态...然后暴力判断这种状态往后一步的情况... 广搜出最优解即可... 呆码: #include<iostream> #include<c ...

  4. BZOJ 1054: [HAOI2008]移动玩具(bfs)

    题面: https://www.lydsy.com/JudgeOnline/problem.php?id=1054 题解: 将每一种状态十六位压成二进制,然后bfs..不解释.. p.s.注意特判初始 ...

  5. python中关键字参数含义_python中接受任意关键字的参数

    1.*args args是非关键字参数,可以理解为形参,为了方便记忆我理解它是arguments的缩写. 2.*kwargs kwargs是键值对参数,为了方便记忆我理解它是key word argu ...

  6. 提高篇 第一部分 基础算法 第4章 广搜的优化技巧

    LOJ 一本通一句话题解系列: - ~victorique~ - 博客园 LOJ 一本通一句话题解系列: - ~victorique~ - 博客园 「一本通 1.4 例 1」电路维修 电路维修 (广搜 ...

  7. 语法入门*算法入门题单

    作者:王清楚 链接:https://ac.nowcoder.com/discuss/817596?type=101&order=0&pos=1&page=4&chann ...

  8. 【新手上路】语法入门算法入门题单

    作者:王清楚 链接:[新手上路]语法入门&算法入门题单_ACM竞赛_ACM/CSP/ICPC/CCPC/比赛经验/题解/资讯_牛客竞赛OJ_牛客网 来源:牛客网 介绍:本题单分为语法入门和算法 ...

  9. BZOJ刷题记录---提高组难度

    BZOJ刷题记录---提高组难度 总目录详见https://blog.csdn.net/mrcrack/article/details/90228694 序号 题号 算法 思想难度 实现难度 总难度 ...

  10. OI 刷题记录——每周更新

    每周日更新 2016.05.29 UVa中国麻将(Chinese Mahjong,Uva 11210) UVa新汉诺塔问题(A Different Task,Uva 10795) NOIP2012同余 ...

最新文章

  1. powershell连接数据库_PowerShell 连接SQL Server 数据库
  2. windbg断点学习总结
  3. Fragment专辑(一):Fragment简介
  4. Qt文档阅读笔记-Broadcast Receiver Example解析
  5. STM32F103:三.(3)MPU6050
  6. DockerCon 2017报告:企业在关注吗?
  7. 短视频jiexi客户端源代码
  8. php怎么画五星红旗,php基于GD库画五星红旗的方法_php技巧
  9. MySQL系列:表空间加密
  10. 调研报告与调查报告的区别及写作技巧
  11. 智能合约升级原理01---起源
  12. JavaScript星星动画心形js特效
  13. Django 查看migration文件生成的sql
  14. C语言从入门到精通笔记
  15. 用友财务共享系统付款单全流程图文演示
  16. pycharm自动生成函数调用图
  17. 贩卖焦虑成常态,为什么还有傻瓜甘之如始?你还在为35岁焦虑吗?
  18. html我们的爱情故事,520我们的爱情故事
  19. bc --- 计算器命令
  20. DHCP抓包-Wireshark分析

热门文章

  1. Android保活实现方案梳理
  2. Flink 在 B 站的多元化探索与实践
  3. 基于 Flink 打造的伴鱼实时计算平台 Palink 的设计与实现
  4. 封装Apache http client工具类
  5. Android Multimedia框架总结(十)Stagefright框架之音视频输出过程
  6. 新地址 贴吧_建议收藏 | 新媒体人必备5大工具
  7. c语言答案纪纲,重庆理工大学C语言程序设计基础教程习题答案(纪纲金艳).doc
  8. pb 如何导出csv_《通讯录管理系统》之 5——数据导出
  9. linux ftp指定下载文件名称,linux中通过FTP下载指定的文件方法linux网页制作 -电脑资料...
  10. matlab 准线,在MATLAB中检测目标中心