博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[TCO2013]Block3Checkers
阅读量:5905 次
发布时间:2019-06-19

本文共 1101 字,大约阅读时间需要 3 分钟。

题意:一个网格上有一些障碍和$3$个在网格边界上的棋子,你要添加一些障碍使得没有两个棋子四连通,问最少添加多少个障碍

官方题解——一张图教你做人...

三个棋子将网格边界分成三段,添加障碍后网格中一定存在一个点使得它可以到这三段(只走障碍的路径,八连通)

所以找出这三段后分别以它们为起点跑最短路即可,经过障碍权值为$0$,经过空地权值为$1$

#include
#include
#include
#include
#include
using namespace std;int h[410],nex[7010],to[7010],v[7010],M;void add(int a,int b,int c){ M++; to[M]=b; v[M]=c; nex[M]=h[a]; h[a]=M;}int dis[410];struct pr{ int x,d; pr(int u=0){x=u;d=dis[u];}}t;bool operator<(pr a,pr b){return a.d>b.d;}priority_queue
q;void dijk(int x){ int i; memset(dis,63,sizeof(dis)); dis[x]=0; q.push(x); while(!q.empty()){ t=q.top(); q.pop(); x=t.x; if(t.d!=dis[x])continue; for(i=h[x];i;i=nex[i]){ if(dis[x]+v[i]
mp;bool ok(int x,int y){ return 0<=x&&x
<=y&&y
mp){ int i,j,k,x,y,f,s[3],ans; ::mp=mp; n=mp.size(); m=mp[0].length(); s[0]=n*m+1; s[1]=n*m+2; s[2]=n*m+3; f=0; for(i=0;i
vt; char s[30]; Block3Checkers cl; while(~scanf("%s",s))vt.push_back(s); printf("%d",cl.blockThem(vt));}*/

转载于:https://www.cnblogs.com/jefflyy/p/9750061.html

你可能感兴趣的文章
PLSQL数据导入
查看>>
自动添加注释—VS2010宏的使用
查看>>
在CI中集成phpmailer,方便使用SMTP发送邮件
查看>>
GMM简单解释
查看>>
如何让ios app支持32位和64位?
查看>>
进制间转换
查看>>
Android的HTTP方式网络通信----HttpClient
查看>>
jQuery(function(){})与(function(){})(jQuery)的区别
查看>>
记一次数据库调优过程(IIS发过来SQLSERVER 的FETCH API_CURSOR语句是神马?)
查看>>
SQL Server快捷方式丢了怎么启动
查看>>
Cocos2d-x V2.x版本对64bit的支持
查看>>
linux 下各个头文件的作用[典]
查看>>
HTTP Content-type
查看>>
Mysql中类似于nvl()函数的ifnull()函数
查看>>
[LintCode] Implement Trie 实现字典树
查看>>
数据集市层——论为什么随着技术分析的深入,决策数据报表问题越来越多
查看>>
three.js 来源目光(十三)Math/Ray.js
查看>>
教你如何精通Struts:Tiles框架
查看>>
Atitit. 包厢记时系统 的说明,教程,维护,故障排查手册v2 pb25.doc
查看>>
Linux下 mkdir 命令详解
查看>>