2020.04.01【NOIP提高组】模拟B【2.Fence Planning】

这是一道关于NOIP提高组的模拟编程题,目标是设计一个四边形围栏,使至少一个奶牛小组完全被包围。题目要求求解最小周长的围栏。解决方案涉及并查集算法,通过寻找连通块的边缘坐标来计算最小周长。给出的样例输入和输出展示了问题的具体实例。
摘要由CSDN通过智能技术生成

2020.04.01【NOIP提高组】模拟B【2.Fence Planning】

题目大意:
Description
Farmer John的NN头奶牛,编号为1…N(2≤N≤105),拥有一种围绕“哞网”,一些仅在组内互相交流却不与其他组进行交流的奶牛小组,组成的复杂的社交网络。每头奶牛位于农场的二维地图上的不同位置(x,y),并且我们知道有M对奶牛(1≤M<105)会相互哞叫。两头相互哞叫的奶牛属于同一哞网。

为了升级他的农场,Farmer John想要建造一个四边与x轴和y轴平行的长方形围栏。Farmer John想要使得至少一个哞网完全被围栏所包围(在长方形边界上的奶牛计为被包围的)。请帮助Farmer John求出满足他的要求的围栏的最小可能周长。有可能出现这一围栏宽为0或高为0的情况。

Input
输入的第一行包含N和M。以下N行每行包含一头奶牛的x坐标和y坐标(至多10^8的非负整数)。以下M行每行包含两个整数a和b,表示奶牛a和b之间有哞叫关系。每头奶牛都至少存在一个哞叫关系,并且输入中不会出现重复的哞叫关系。

Output
输出满足Farmer John的要求的围栏的最小周长。

Sample Input
7 5
0 5
10 5
5 0
5 10
6 7
8 6
8 4
1 2
2 3
3 4
5 6
7 6

Sample Output
10

分析:首先,大家应该都能想到要查找连通块在X轴方向上的长度与在Y轴方向上的长度的和的最小值的两倍。 似乎语言并不能很清晰地表达清楚。
化成式子就是ans=2*min(ans,maxx-minx+maxy-miny) 注意,这里的minx maxx miny maxy表达的是单个连通块的边缘
这里我用的是两遍并查集,标记连通关系,更新连通块的边缘坐标,然后查找每个连通块的边缘坐标,最后更新ans就可以了。

附上AC C++代码:

#include <cstdio>
#include <iostream> 

using namespace std;

int  father[1000005],maxx[1000005],maxy[1000005],minx[1000005],miny[1000005],x[1000005],y[1000005];
int 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值