BZOJ 3432: [Usaco2014 Jan]Cross Country Skiing (二分+染色法)
还是搜索~~可以看出随着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 (二分+染色法)相关推荐
- 洛谷 题解 P4955 【[USACO14JAN]Cross Country Skiing 越野滑雪】
二分+DFS 看到这么多大佬写了并查集,BFS的,还没有人写DFS版的,那么肯定是要来水水积分的啦毕竟这可是道伪紫题呢! 做法楼上楼下也讲得很清楚了吧,详见代码的注释 #include<bits ...
- BZOJ 3430: [Usaco2014 Jan]Ski Course Rating(并查集+贪心)
题面 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 136 Solved: 90 [Submit][Status][Discuss] Descript ...
- javascript数据结构与算法---检索算法(二分查找法、计算重复次数)
javascript数据结构与算法---检索算法(二分查找法.计算重复次数) /*只需要查找元素是否存在数组,可以先将数组排序,再使用二分查找法*/ function qSort(arr){if (a ...
- java二分查找法_java算法之二分查找法的实例详解
java算法之二分查找法的实例详解 原理 假定查找范围为一个有序数组(如升序排列),要从中查找某一元素,如果该元素在此数组中,则返回其索引,否则返回-1.通过数组长度可取出中间位置元素的索引,将其值与 ...
- java 二分查找_计算机入门必备算法——二分查找法
1.引言 笔者对于计算机的研究一直停滞不前,近期想对一些算法进行复习和进一步的研究,每天都会更新一个新的算法,算法有难有易,层层递进.不希望能学的有多么高深,只希望在一些最基本的算法上有编码的思路,或 ...
- 每天5分钟玩转python3算法:二分查找法
从今天开始,博主准备开始一段常见算法的学习,算法实现使用Python3,希望坚持下去^_^ alg1:二分查找法 1.运行时间 二分查找相比于依次查找,查询速度提升明显: + 依次查找:O(n) + ...
- 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+ ...
- POJ 1061 BZOJ 1477 Luogu P1516 青蛙的约会 (扩展欧几里得算法)
POJ 1061 BZOJ 1477 Luogu P1516 青蛙的约会 (扩展欧几里得算法) 手动博客搬家: 本文发表于20180226 23:35:26, 原地址https://blog.csdn ...
- 学习练习 java 二分查找法
1 package com.hanqi; 2 3 import java.util.*; 4 5 public class Test5 { 6 7 public static void main(St ...
最新文章
- indent 的格式
- 速卖通代运营收费标准,什么样的商家适合找代运营公司
- idea 将普通Java项目打包成可直接执行的jar
- nginx丢弃http包体处理
- MyEclipse持续性开发教程:用JPA和Spring管理数据(三)
- 行人和人脸识别数据集
- MySQL安装详细图解
- 多个pdf合并成一个pdf_多个PDF怎么合并?这些PDF合并方法很简单!
- 算法设计与分析复习——第四章:贪心算法
- C# 打开Win10蓝牙管理模块
- 什么时候需要用到RCC_APB2Periph_AFIO–复用IO时钟的使用
- 菜鸡的求学之路-JavaScript
- SQL注入之floor报错注入
- RAID技术图解(mdadm)
- php 百度大搜信息流跳转技术,百度竞价跳转代码,
- ios android 手柄,雷蛇发布支持iOS和安卓的新手柄Razer Kishi,全世界都在NS化!
- express+mongoDB项目创建及API使用步骤
- 被动元件(Passive components)
- 天天团购——客户需求:抢购时间不到的产品首页显示
- python读取usb扫码枪数据_PyUsb USB条码扫描
热门文章
- 机器人编程语言python-机器人编程语言有哪些?
- python怎么画简单图片-小白艰难的Python图像的绘制
- python第三方库numpy-Python第三方库之Numpy库
- 开课吧python视频百度云-做摄影2年,工资5000,兼职2W...
- 在哪里学python好-自学python好还是去培训机构好?
- python中文叫什么意思-在python中,“~”是什么意思?
- 学python的好处-学习python有什么好处?python强大之处在哪?
- python一千行入门代码-Python – 一次从文件中读取1000行
- python基本使用-Python time库基本使用方法分析
- python 类-9. 类 — Python 3.9.0 文档