给定一个大小为N×M的矩形网格,即1≤x≤N的单元格(x,y),1≤y≤M。
如果两个单元共用一侧,则它们相邻。更正式地说,如果| x1 - x2 |,则两个单元格(x1,y1),(x2,y2)相邻。 + | y1 - y2 |在两个相邻的单元之间可以有一个墙。如果它们之间有一条路,则连接两个单元a和b(换句话说,存在一系列单元c [1],c [2],...,c [k],使得c [1] = a ,c [k] = b,并且对于每个1≤i 现在我们获得Q查询,每个查询都有以下四种类型。 注意:我们可以假设在查询之前网格上没有墙。 现在给出N,M和Q查询,我们需要为类型3和4的查询说明答案。 我的方法:我目前正在考虑通过创建一个图表,然后为每个查询执行dfs排序。这种方法可以提高效率还是有其他更好的方法来解决这个问题? 网格的大小最大为1000 X 1000。查询最多可达10 ^ 6 示例:设N = 3且M = 4,并且在开始时我们被询问类型3的查询是(1,1)连接到(3,4)然后答案为是,如前所述网格是这样的: http://postimg.org/image/5qoug2dov/ 现在假设我们有类型1和2的查询,网格变成这样: http://postimg.org/image/tm14jtg9h/ 现在,同一查询3的答案为否
答案 0 :(得分:0)
假设您可以离线回答查询,然后以相反的顺序处理它们会将其转换为增量连接问题,这对于不相交的数据结构非常合适,其根节点会使用集合中的节点总数进行扩充。