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;
}
BZOJ 3432: [Usaco2014 Jan]Cross Country Skiing (二分+染色法)的更多相关文章
- 【BZOJ】3432: [Usaco2014 Jan]Cross Country Skiing (bfs+二分)
http://www.lydsy.com/JudgeOnline/problem.php?id=3432 题目说要相互可达,但是只需要从某个点做bfs然后判断其它点是否可达即可. 原因太简单了.... ...
- bzoj 1594: [Usaco2008 Jan]猜数游戏——二分+线段树
Description 为了提高自己低得可怜的智商,奶牛们设计了一个新的猜数游戏,来锻炼她们的逻辑推理能力. 游戏开始前,一头指定的奶牛会在牛棚后面摆N(1 <= N<= 1,000,00 ...
- 洛谷 题解 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 ...
- BZOJ 3433 [Usaco2014 Jan]Recording the Moolympics:贪心
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3433 题意: 给出n个区间[a,b). 有两个记录器,每个记录器中存放的区间不能重叠. 求 ...
- BZOJ3433: [Usaco2014 Jan]Recording the Moolympics
3433: [Usaco2014 Jan]Recording the Moolympics Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 55 So ...
- 3433: [Usaco2014 Jan]Recording the Moolympics
3433: [Usaco2014 Jan]Recording the Moolympics Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 137 S ...
- [bzoj 3048] [Usaco2013 Jan]Cow Lineup
[bzoj 3048] [Usaco2013 Jan]Cow Lineup Description 给你一个长度为n(1<=n<=100,000)的自然数数列,其中每一个数都小于等于10亿 ...
- [BZOJ 2653] middle(可持久化线段树+二分答案)
[BZOJ 2653] middle(可持久化线段树+二分答案) 题面 一个长度为n的序列a,设其排过序之后为b,其中位数定义为b[n/2],其中a,b从0开始标号,除法取下整. 给你一个长度为n的序 ...
随机推荐
- Swing 布局时 组件大小问题
在JFrame中放置了几个JPanel ,想调整JPanel大小,一直无效. 问题在于: 因为JPanel A的四周没有添加任何组件,所以JPanel B会把JPanel A填满.这种情况想固定JPa ...
- pandas 按照列A分组,将同一组的列B求和,生成新的Dataframe
对于pandas中的Dataframe,如果需要按照列A进行分组,将同一组的列B求和,可以通过下述操作完成: df = df.groupby(by=['column_A'])['column_B']. ...
- MYSQL 函数复习
数学函数 ABS(X) 返回X的绝对值 SQRT(x) 返回非负数X的二次方根 MOD(x,y) 返回x被y除后的余数 CEIL(x) ...
- zepto.js swipe实现触屏tab菜单
今天我们来说下zepto.js,有兴趣的朋友可以先进这个网站“http://zeptojs.com/” ,这个可以说是手机里的jquery,但是它取消了hover,加上了swipe及tap这两个触屏功 ...
- JavaScript特效制作经典精讲(案例入门详解、可直接粘贴拷贝运行、史上最牛案例)
技巧一.添加链接提示 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:// ...
- delphi 字符串查找替换函数 转
1. 提取字符串中指定子字符串前的字符串 Function Before( Src:string ; S:string ): string ; Var F: Word ; begin ...
- bmp图片显示
文件IO项目: 在开发板屏幕上循环显示目录里的图片 a.按照一定的间隔循环显示目录里的bmp图片 b.实现手指滑动来显示目录里的图片(bmp,jpg)上一张,下一张 d1: 1.能操控屏幕(查询开发板 ...
- HDU-5123-who is the best?
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5123 水题一个,直接hash: 代码 #include<stdio.h>#include& ...
- C语言的位运算的优势
位运算加速技巧1. 如果乘上一个2的倍数数值,可以改用左移运算(Left Shift) 加速 300% x = x * 2;x = x * 64;//改为:x = x << 1; // 2 ...
- 选择移动web开发框架研究——有mui、frozenui以及Sencha Touch等
纯粹的总结一下移动web开发框架,移动 web开发框架有jQuery Mobile .Sencha Touch等等,他们都来源于web开发,是成熟的框架,jQuery Mobile出自于jQuery家 ...