DFS染色解决区域分块问题UVALive 6663

怪我比赛的时候想法太过于杂乱了。

注重于区域的属性了。甚至还想用状态压缩或者是hash来描述分块的区域。

其实我们的可以宏观的角度去审视这个问题。就是求分区的问题。那么我们完全可以标记边框的值为1。即不可行走。

那么我们扫描整片区域。统计一个区域 。就用DFS把这整片区域给覆盖。然后继续扫描下去。

离散化在这里使用。

注意点:在于这是一个数区间块数的问题。假如2者数据没有相差一。也会把一块区域给覆盖掉。这是一个考虑会不会影响离散化后的相邻问题的一个问题。

比赛的时候我当时也没注意。也许以后离散化后要2个方面去考虑一下这个问题。

但是同时我查询到了。可以开2倍的数组。用偶数存储数据。那么同样可以做到。分隔的效果。

时间: 2024-08-10 14:57:48

DFS染色解决区域分块问题UVALive 6663的相关文章

UVALive 6663 Count the Regions --离散化+DFS染色

题意:给你n(n<=50)个矩形(左上角坐标和右下角坐标),问这些矩形总共将平面分成多少个部分.坐标值可能有1e9. 分析:看到n和坐标的范围,容易想到离散化,当时就没想到离散化以后怎么判断区域个数.后来看别人代码才知道,可以将边界上的点vis赋为1,那么枚举所有哈希后的平面上的点,遇到一个vis=0的点就从这点一直搜过去,搜到边界自动会停止了,因为边界vis=1,并且ans++,就可以了.真是太弱.. 代码: #include <iostream> #include <cstdi

UVALive 6663 Count the Regions 离散+bfs染色_(:зゝ∠)_

题目链接:点击打开链接 gg..== #include <cstdio> #include <cstring> #include<iostream> #include <queue> #include <set> #include <map> #include <algorithm> #include <string> using namespace std; #define ll long long #def

hdu 5313 Bipartite Graph(dfs染色 或者 并查集)

Problem Description Soda has a bipartite graph with n vertices and m undirected edges. Now he wants to make the graph become a complete bipartite graph with most edges by adding some extra edges. Soda needs you to tell him the maximum number of edges

【POJ - 2386】Lake Counting (dfs+染色)

-->Lake Counting 直接上中文了 Descriptions: 由于近日阴雨连天,约翰的农场中中积水汇聚成一个个不同的池塘,农场可以用 N x M (1 <= N <= 100; 1 <= M <= 100) 的正方形来表示.农场中的每个格子可以用'W'或者是'.'来分别代表积水或者土地,约翰想知道他的农场中有多少池塘.池塘的定义:一片相互连通的积水.任何一个正方形格子被认为和与它相邻的8个格子相连. 给你约翰农场的航拍图,确定有多少池塘 Input Line 1

UVALive 6663 Count the Regions (离散化,染色,dfs)

https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4675 题意: 二维平面内给出若干矩形,平面被矩形的边分为若干个区域,求一共有多少区域. 分析: 由于矩形只有50个,离散化后的平面大约是100*100的.不妨对于每个矩形覆盖的区域进行染色(用二进制位状压),相同颜色的联通块就是一个区域,只要dfs找联通块的个数即可.值得注意

[UVALive 6663 Count the Regions] (dfs + 离散化)

链接:https://icpcarchive.ecs.baylor.edu/index.php? option=com_onlinejudge&Itemid=8&page=show_problem&problem=4675 题目大意: 在一个平面上有 n (1<=n<=50) 个矩形.给你左上角和右下角的坐标(0<=x<=10^6, 0<=y<=10^6).问这些矩形将该平面划分为多少块. 解题思路: 因为n非常小,能够对整个图进行压缩.仅仅要不

UvaLive 6663 Count the Regions 离散化+DFS

链接:http://vjudge.net/problem/viewProblem.action?id=49408 题意:在平面内给出若干个矩形,求出它们能将整个平面分成多少份. 思路:刚开始一眼看到觉得是几何题,但是发现最多只有50个矩形后,灵光一闪觉得直接离散化再暴力就可以了.把所有矩形的x,y坐标分别离散化,并且为了防止出现离散的太近导致矩形之前没有空隙的情况,将所有点离散化的坐标记作偶数坐标.然后DFS找到所有矩形之间的空隙. 代码: #include<iostream> #includ

Codeforces Round #360 (Div. 1)A (二分图&dfs染色)

题目链接:http://codeforces.com/problemset/problem/687/A 题意:给出一个n个点m条边的图,分别将每条边连接的两个点放到两个集合中,输出两个集合中的点,若不可能则输出-1: 思路:通过画图我们不难发现,图中没有出现长度为奇数的环则是可行的,反之则是不行的.那么现在我们只需判断有木有长度为偶数的环即可. 对于这点我们可以直接用dfs搜索+染色,对于当前标记为1的点,我们将其所有儿子标记为2, 对于当前标记为2的点,将其所有儿子标记为1,若出现某个节点的标

Codeforces 776D:The Door Problem(DFS染色)

http://codeforces.com/problemset/problem/776/D 题意:有n个门,m个开关,每个门有一个当前的状态(0表示关闭,1表示打开),每个开关控制k个门,但是每个门确切的受两个开关控制,如果一个开关打开,那么原来关闭的门会打开,打开的门关闭,问是否存在一个情况使得所有的门打开. 思路:类似于01染色,把开关当成点,门当前的状态当成边权建图.初始先假设一个门的状态(初始假设为0和假设为1都是一样的,举几个例子就发现了),然后因为每个门受两个开关控制,所以可以推出