题目戳我

\(\text{Solution:}\)

好久没写啥\(dfs\)了,借这个题整理下细节。

观察到答案具有二分性,所以先求出其差的最大最小值,\(\log val\)的复杂度不成问题。

考虑如何\(check:\)

考虑一个\(dfs\)预处理当前点为\((i,j),\)高度为\(k\)所能到达的所有点。这一步是\(n^2\)的复杂度。注意判断是否出界的时候符号不要打反,以及这题所谓高度差是在绝对值意义上的。

遍历变量时不要重名。之所以每次不需要清空\(vis\)是因为每次\(dfs\)都会保证找齐一个点所能到达的所有点。

于是,这题可以在\(O(n^2\log m)\)的复杂度完成。

还有一个想法是求出原树的最小生成树后处理出\(siz\)和子树的最大差。然后可以\((n^2\log n^2)\)实现这题。

#include<bits/stdc++.h>
using namespace std;
const int MAXN=5e5+10;
int a[501][501],n;
const int dx[4]={1,0,-1,0};
const int dy[4]={0,1,0,-1};
int L,R,ans,vis[501][501];
int dfs(int x,int y,int kk){
int cnt=1;
vis[x][y]=1;
for(int k=0;k<4;++k){
int nx=x+dx[k],ny=y+dy[k];
if(nx<1||ny<1||nx>n||ny>n||vis[nx][ny]||abs(a[x][y]-a[nx][ny])>kk)continue;
cnt+=dfs(nx,ny,kk);
}
return cnt;
}
bool check(int k){
memset(vis,0,sizeof vis);
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j){
if(vis[i][j])continue;
int C=dfs(i,j,k);
if(C*2>=n*n)return true;
}
return false;
}
int main(){
scanf("%d",&n);
L=(1<<30);R=-L;
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
scanf("%d",&a[i][j]);
for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j){
for(int k=0;k<4;++k){
int x=i+dx[k],y=j+dy[k];
R=max(R,a[i][j]-a[x][y]);
L=min(L,a[i][j]-a[x][y]);
}
}
}
while(L<=R){
int mid=L+R>>1;
if(check(mid))ans=mid,R=mid-1;
else L=mid+1;
}
printf("%d\n",ans);
return 0;
}

【题解】[USACO13FEB]Tractor S的更多相关文章

  1. [USACO13FEB] Tractor

    题目链接 大家的 Blog 里面都是做过的题目,只有我的里面什么都没有 那我也开始写一点吧 刷着刷着 DP 不知怎的就出来一道这个题……用时 2 hours 后怒而删两个文件重构…… 然后过了……过了 ...

  2. [USACO13FEB]出租车Taxi

    洛谷题目链接:[USACO13FEB]出租车Taxi 题目描述 Bessie is running a taxi service for the other cows on the farm. The ...

  3. [bzoj3062][Usaco13Feb]Taxi_贪心

    Taxi bzoj-3062 Usaco13Feb 题目大意:有n个奶牛想坐出租车.第i头奶牛在起点a[i]等候,想坐出租车到b[i].Bessie从0出车,车上只能坐一头奶牛.她必须完成所有奶牛的要 ...

  4. USACO Tractor

    洛谷 P3073 [USACO13FEB]拖拉机Tractor 洛谷传送门 JDOJ 2351: USACO 2013 Feb Silver 2.Tractor JDOJ传送门 题意翻译 题目描述 F ...

  5. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  6. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  7. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  8. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  9. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

随机推荐

  1. chromevue扩展 vue-devtools-master 谷歌vue的扩展程序

    1,在百度网盘中下载压缩包,网盘地址:https://pan.baidu.com/s/1BnwWHANHNyJzG3Krpy7S8A ,密码:xm6s 2,将压缩包解压到F盘,F:\chromeVue ...

  2. Android开发之 。。各种Adapter的用法

    同样是一个ListView,可以用不同的Adapter让它显示出来,比如说最常用的ArrayAdapter,SimpleAdapter,SimpleCursorAdapter,以及重写BaseAdap ...

  3. Unity Job System

    https://docs.unity3d.com/Manual/JobSystem.html https://github.com/Unity-Technologies/EntityComponent ...

  4. OpenJ_Bailian - 2995-登山(两遍最长上升子序列+枚举顶点)

    五一到了,PKU-ACM队组织大家去登山观光,队员们发现山上一个有N个景点,并且决定按照顺序来浏览这些景点,即每次所浏览景点的编号都要大于前一个浏览景点的编号.同时队员们还有另一个登山习惯,就是不连续 ...

  5. js map数据结构

    Map 对象保存键值对,并且能够记住键的原始插入顺序.任何值(对象或者原始值) 都可以作为一个键或一个值.  map对象常用于保存键值对,它的键是任意数据类型,常用于建立数据的映射关系 和对象的区别: ...

  6. promise 基本流程

  7. 干货 | 45张图庖丁解牛18种Queue,你知道几种?

    在讲<21张图讲解集合的线程不安全>那一篇,我留了一个彩蛋,就是Queue(队列)还没有讲,这次我们重点来看看Java中的Queue家族,总共涉及到18种Queue.这篇恐怕是市面上最全最 ...

  8. Zabbix Agent升级

      最近对Zabbix Server进行了升级,所以陆陆续续对Zabbix Agent也做了升级,下面是这几天工作的一个小结,鉴于经验有限和认知有限等各方面因素,下文很难面面俱到,如有疏漏或不足之处, ...

  9. [LeetCode]364. 加权嵌套序列和 II (DFS)

    题目 给一个嵌套整数序列,请你返回每个数字在序列中的加权和,它们的权重由它们的深度决定. 序列中的每一个元素要么是一个整数,要么是一个序列(这个序列中的每个元素也同样是整数或序列). 与 前一个问题 ...

  10. Scala的递归函数应用

    使用递归函数实现累加: def sum(nums:Int*):Int={ if(nums.length == 0) 0 else nums.head + sum(nums.tail:_*) } 结果为 ...