还是搜索~~可以看出随着D值的增大能到达的点越多,就2分d值+染色法遍历就行啦~~~

CODE:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<stack>
using namespace std;
#define maxn 510
struct node {
 int x,y;
}st;
stack<node> s;
int x[maxn][maxn],y[maxn][maxn];
bool b[maxn][maxn];
int n,m,sum;
int w[4][2]={{1,0},{-1,0},{0,-1},{0,1}};
bool check(int d){
 int t=1;
 memset(b,0,sizeof(b));
 while (!s.empty()) s.pop();
 s.push(st);
 b[st.x][st.y]=1;
 for (int i=1;i<=n;i++) b[i][0]=b[i][m+1]=1;
 for (int i=1;i<=m;i++) b[0][i]=b[n+1][i]=1;
 while (!s.empty()){
  node u=s.top ();
  s.pop();
  for (int i=0;i<4;i++)
   if (!b[u.x+w[i][0]][u.y+w[i][1]]&&abs(x[u.x+w[i][0]][u.y+w[i][1]]-x[u.x][u.y])<=d){
    b[u.x+w[i][0]][u.y+w[i][1]]=1;
    if (y[u.x+w[i][0]][u.y+w[i][1]]) {t++;if (t==sum) return 1;}
    s.push((node){u.x+w[i][0],u.y+w[i][1]});
   }
 }
 return 0;
}
int main(){
 scanf("%d%d",&n,&m);
 for (int i=1;i<=n;i++)
  for (int j=1;j<=m;j++) scanf("%d",&x[i][j]);
 for (int i=1;i<=n;i++)
  for (int j=1;j<=m;j++) {
   scanf("%d",&y[i][j]);
   if (y[i][j]) {
    sum++;
    if (st.x==0) st=(node){i,j};
   }
  }
 if (sum<=1) {printf("0");return 0;}
 int l=0,r=1000000000;
 while (l+1<r) {
  int mid=(l+r)>>1;
  if (check(mid)) r=mid;
  else l=mid;
 }
 if (check(l)) printf("%d\n",l);
 else printf("%d\n",r);
 return 0;
}

转载于:https://www.cnblogs.com/New-Godess/p/4348952.html

BZOJ 3432: [Usaco2014 Jan]Cross Country Skiing (二分+染色法)相关推荐

  1. 洛谷 题解 P4955 【[USACO14JAN]Cross Country Skiing 越野滑雪】

    二分+DFS 看到这么多大佬写了并查集,BFS的,还没有人写DFS版的,那么肯定是要来水水积分的啦毕竟这可是道伪紫题呢! 做法楼上楼下也讲得很清楚了吧,详见代码的注释 #include<bits ...

  2. BZOJ 3430: [Usaco2014 Jan]Ski Course Rating(并查集+贪心)

    题面 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 136 Solved: 90 [Submit][Status][Discuss] Descript ...

  3. javascript数据结构与算法---检索算法(二分查找法、计算重复次数)

    javascript数据结构与算法---检索算法(二分查找法.计算重复次数) /*只需要查找元素是否存在数组,可以先将数组排序,再使用二分查找法*/ function qSort(arr){if (a ...

  4. java二分查找法_java算法之二分查找法的实例详解

    java算法之二分查找法的实例详解 原理 假定查找范围为一个有序数组(如升序排列),要从中查找某一元素,如果该元素在此数组中,则返回其索引,否则返回-1.通过数组长度可取出中间位置元素的索引,将其值与 ...

  5. java 二分查找_计算机入门必备算法——二分查找法

    1.引言 笔者对于计算机的研究一直停滞不前,近期想对一些算法进行复习和进一步的研究,每天都会更新一个新的算法,算法有难有易,层层递进.不希望能学的有多么高深,只希望在一些最基本的算法上有编码的思路,或 ...

  6. 每天5分钟玩转python3算法:二分查找法

    从今天开始,博主准备开始一段常见算法的学习,算法实现使用Python3,希望坚持下去^_^ alg1:二分查找法 1.运行时间 二分查找相比于依次查找,查询速度提升明显: + 依次查找:O(n) + ...

  7. java for循环和数组--冒泡排序、二分查找法

    //100以内与7相关的数 for(int a=1;a<=100;a++){     if(a%7==0||a%10==7||a/10==7){      System.out.print(a+ ...

  8. POJ 1061 BZOJ 1477 Luogu P1516 青蛙的约会 (扩展欧几里得算法)

    POJ 1061 BZOJ 1477 Luogu P1516 青蛙的约会 (扩展欧几里得算法) 手动博客搬家: 本文发表于20180226 23:35:26, 原地址https://blog.csdn ...

  9. 学习练习 java 二分查找法

    1 package com.hanqi; 2 3 import java.util.*; 4 5 public class Test5 { 6 7 public static void main(St ...

最新文章

  1. indent 的格式
  2. 速卖通代运营收费标准,什么样的商家适合找代运营公司
  3. idea 将普通Java项目打包成可直接执行的jar
  4. nginx丢弃http包体处理
  5. MyEclipse持续性开发教程:用JPA和Spring管理数据(三)
  6. 行人和人脸识别数据集
  7. MySQL安装详细图解
  8. 多个pdf合并成一个pdf_多个PDF怎么合并?这些PDF合并方法很简单!
  9. 算法设计与分析复习——第四章:贪心算法
  10. C# 打开Win10蓝牙管理模块
  11. 什么时候需要用到RCC_APB2Periph_AFIO–复用IO时钟的使用
  12. 菜鸡的求学之路-JavaScript
  13. SQL注入之floor报错注入
  14. RAID技术图解(mdadm)
  15. php 百度大搜信息流跳转技术,百度竞价跳转代码,
  16. ios android 手柄,雷蛇发布支持iOS和安卓的新手柄Razer Kishi,全世界都在NS化!
  17. express+mongoDB项目创建及API使用步骤
  18. 被动元件(Passive components)
  19. 天天团购——客户需求:抢购时间不到的产品首页显示
  20. python读取usb扫码枪数据_PyUsb USB条码扫描

热门文章

  1. 机器人编程语言python-机器人编程语言有哪些?
  2. python怎么画简单图片-小白艰难的Python图像的绘制
  3. python第三方库numpy-Python第三方库之Numpy库
  4. 开课吧python视频百度云-做摄影2年,工资5000,兼职2W...
  5. 在哪里学python好-自学python好还是去培训机构好?
  6. python中文叫什么意思-在python中,“~”是什么意思?
  7. 学python的好处-学习python有什么好处?python强大之处在哪?
  8. python一千行入门代码-Python – 一次从文件中读取1000行
  9. python基本使用-Python time库基本使用方法分析
  10. python 类-9. 类 — Python 3.9.0 文档