题目

https://www.luogu.org/problemnew/show/P3073

思路

二分+并查集
首先我们注意到,这题有一个非常重要的特点:高度差带来的花费是不会累加的,只要一次性花费了d元钱,高度差<=d的格子都可以随便走,而且可以走不止一次。

因此,只要d足够大,我们是一定可以达到要求的。很显然,我们应该对d进行二分答案。

下一个问题:知道了d的值以后如何判断当前d值是否可行呢?我们不妨用一个并查集。依次扫过整个矩阵,对于每一个格子,枚举它的上下左右四格(这里可以用一个位移增量数组dx[4],dy[4]来搞定),如果高度差在<=当前的d,就并查集合并。

这里相比普通并查集又多了一个技巧:开一个size数组,记录每一个集合的大小,合并的时候要把size累加。对于每一个d,它能走到的最多的格子数就是size数组里最大的一个元素。我们判断这个格子数是否达到了全部格子数的一半half,然后改变left或right边界,继续二分。

代码

#include <bits/stdc++.h>
using namespace std;
const int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};
int n;
long long a[503][503];
int fa[250005],size[250005];
void init()
{for(int i=0; i<n; i++) for(int j=0; j<n; j++){fa[i*n+j]=i*n+j;size[i*n+j]=1;}
}
int findFather(int a)
{if(fa[a]==a) return a;fa[a]=findFather(fa[a]);return fa[a];
}
void Union(int x,int y)
{int fx=findFather(x);int fy=findFather(y);if(fx!=fy){size[fy]+=size[fx];fa[fx]=fy;}
}
int main()
{cin>>n;int half;if((n*n)%2==1) half=(n*n)/2+1;else half=(n*n)/2;for(int i=0; i<n; i++) for(int j=0; j<n; j++)cin>>a[i][j];int res,mind=0,maxd=1000000;while(mind<=maxd){int d=(mind+maxd)/2;res=0;init();for(int i=0; i<n; i++) for(int j=0; j<n; j++){for(int k=0; k<4; k++){int xx=i+dx[k],yy=j+dy[k];if(xx<0 || xx>=n || yy<0 || yy>=n) continue;else if(abs(a[i][j]-a[xx][yy])<=d){Union(i*n+j,xx*n+yy);res=max(res,size[fa[i*n+j]]);}}}if(res>=half)maxd=d-1;elsemind=d+1;}cout<<mind<<endl;return 0;
}

[USACO13FEB]拖拉机Tractor相关推荐

  1. 洛谷 P1849 [USACO12MAR]拖拉机Tractor

    题目描述 After a long day of work, Farmer John completely forgot that he left his tractor in the middle ...

  2. [luoguP1849] [USACO12MAR]拖拉机Tractor(spfa)

    传送门 神奇的spfa #include <queue> #include <cstdio> #include <cstring> #include <ios ...

  3. USACO Tractor

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

  4. 牛语 and 采蘑菇的拖拉机

    牛语 (latin.pas/c/cpp) [问题描述] 奶牛们听说猪发明了一种秘密语言,叫做"猪语",因为猪不想让主人陈亮宇知道他们在商量什么.奶牛们也感觉这样很不错,所以她们想发 ...

  5. [背包DP] 洛谷相关题目整理与练习(74题-)

    题目 以背包为标签,搜出了这么多题,按难度排序,一道一道做: (*):下面有提到 TODO 题目 难度 备忘录 AC 采药 普及- 01背包模板 AC 开心的金明 普及- 01背包模板 AC 小A点菜 ...

  6. 【PP-YOLOE+】第18届全国大学生智能汽车竞赛百度完全模型组线上资格

    ★★★ 本文源自AlStudio社区精品项目,[点击此处]查看更多精品内容 >>> 第十八届全国大学生智能汽车竞赛-百度完全模型组-线上资格赛基线 1.比赛背景介绍   全国大学生智 ...

  7. 20171126,三四两题

    3.采蘑菇的拖拉机   (tractor.pas/c/cpp) [问题描述] 春天来了,朱昶成的农场里会长很多蘑菇,而观察奶牛开着拖拉机采蘑菇成了朱昶成喜爱做的一件事情. 朱昶成的农场被分为了一个平面 ...

  8. 第四部分—C++核心编程_4. 类和对象

    4.1 类和对象的基本概念 4.1.1 C和C++中struct区别 c语言struct中只有变量 c++语言struct中既有变量,也有函数 4.1.2 类的封装 我们编写程序的目的是为了解决现实中 ...

  9. P3073 [USACO13FEB]Tractor S

    知识点:二分,深度优先搜索 难度:4 这个题是最小化的二分,我们把求最优解问题转化为判定问题,那么就是当前拖拉机价钱能否走一半的地图,这里一半的地图就是把地图划分连通块,有没有连通块的个数达到一半,也 ...

最新文章

  1. TensorFlow被曝存在严重bug,搭配Keras可能丢失权重,用户反映一个月仍未修复
  2. oracle vm virtualbox右ctrl切换显示模式
  3. SAP Spartacus里几个和Focus相关的directive的继承关系以及元素focus是如何实现的
  4. 关于清晰讲解linux正则表达式的博文分享
  5. 美式桌球游戏 开源_开源工具,可将英译为美式英语
  6. HTML 5适合小公司,适合在大平台上做内容
  7. web图片铺满网页_html5的video的背景图片poster铺满全屏大小方法
  8. 在职场想要涨薪升职,需要打造个人品牌
  9. matlab数字图像处理灰度变换ppt课件,数字图像处理 灰度变换.ppt
  10. 【服务器】服务器安全防护、防止服务器攻击和保护措施
  11. uc极度精简版_UC浏览器安卓版-UC浏览器(UCBrowser)12.0.4.987 去广告精简版-东坡下载...
  12. 《Real-Time Rendering 4th Edition》全文翻译 - 第6章 纹理化(上)6.1 ~ 6.3
  13. LeetCode 41. 缺失的第一个正数 First Missing Positive
  14. 【数学分析】数列的上极限与下极限
  15. JavaScript实现在线Markdown编辑器、转换HTML工具-toolfk程序员工具网
  16. 数据结构之冒泡排序算法(图解+分析+代码调优)
  17. c语言编程64位,win-tc语言编程软件官方下载
  18. 学了C/C++,我能做什么?
  19. 如何实现上传图片并显示图片?
  20. 生化危机绝密报告2java,生化危机 绝密任务V2.1

热门文章

  1. [介绍]关于我与我的未来
  2. html的css样式中表示后代选择器,css样式,后代选择器
  3. scrapy爬虫折腾系列-02
  4. 这两他安搬家,今天终于搬完了!
  5. AM5728调试经历(2)
  6. 高分子专业计算机建模,分子建模
  7. 曝光!中国女性的私密数据分析…
  8. 《国产操作系统之银河麒麟》桌面环境
  9. 由于navigation引起viewwillappear不被调用
  10. 管理计算机域的内置账户怎么取消,取消普通域用户将计算机加入域的权限