CCPC-Wannafly Winter Camp(秦皇岛)Day3:数据结构学习记录

Problem 1

题目链接:BZOJ4423: [AMPPZ2013] Bytehattan

Description
给一张n × m的网格图,每次删去一条边,询问删完之后这条边的
两个端点是否联通。

Solution

对偶图 + 并查集。

对偶图: 是将这个平面的每个区域看成点,原图每一条边所属的两个相邻的区域对应在对偶图中的点有连边。比如下面这张图:

蓝色的部分就是一个平面图,红色的就是它的对偶图。

回到这道题:
由于强制在线,不能时光倒流+加边。那么可以考虑对偶图。
对于每条线段挨着的两个面积块,如果它们之间是连通的,那么删除这条线段后这两个面积块会在一个环中,且这个环包含且只包含两个端点中的一个(即一个点在环里,一个点在环外),则原图即为不能连通。反过来也成立。
所以只需要把平面图删边转化为对偶图加边就可以了。然后用并查集维护一下连通性即可。

也就是说,在平面图上删边相当于在对偶图上加边,在平面图上是否联通转化为在对偶图上是否不连通,类似于平面图的最大流转化为对偶图的最短路。

Code

#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <set>
#include <map>
#define fi first
#define se second
#define mst(a, b) me
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值