[AMPPZ 2013]Bytehattan

先把题目链接贴在这里喵~

http://main.edu.pl/en/archive/amppz/2013/baj

话说真是一道让我严重怀疑我的智商的好题目,

话说此题第一感觉。嗯?似乎离线做做就可以了喵?

诶呦我艹,这个和强制在线一样的感觉是怎么一回事啊!

然后我苦思良久,终于在我他喵的苦思冥想之下,发现了——

此题果然非我所能破~

但是看了题解后顿时表示这么多年书白读了TAT

首先原图是平面图,且仅有删边操作

我们维护原图G的对偶图G‘的一个子图G‘‘,这个子图的连通性对应了G中各个域(各个方块)的连通性

一开始没有边被删去, V‘‘=V‘ , E‘=Ø ,说明各个域都不连通

然后(在G中)删一条边,就在G‘‘中加上对应的那条边

我们注意到现在只有加边的操作,可以用并查集维护所有域的连通性!

而且因为平面图的对偶图仍是平面图,平面图的子图仍是平面图

所以易得G‘‘是平面图

【引理】

  •平面图G‘‘描述了平面图G删去若干条边后各域的连通性。

  •则G‘‘画到平面上后的每个域对应了G的一个新增的连通分量。

【推论】

  •如果G中的一条边是G的桥,那么在G‘‘中加入这条边的对应边将引入新的环。

  •如果G中的一条边是G的桥,那么这条边的对应边的两端是联通的。

于是只要使用并查集维护各域的联通性,每次加边前询问两端是否联通就成功解决该题目了~

没看懂不要紧,其实我也不知道我在说什么,还是看图吧

1.现在有 9 个域,互相不练通

2.oh,我们删掉了一条边

3.然后 2 和 5 两个域就联通了

那么什么时候两个点不练通了呢?注意第 2 行第 3 个点

4.2 3 5 6域都是联通的

5.我们又要删去一条边,但是 2 3域已经联通了!这样就形成了一个环!

6.我们发现第 2 行第 3 个点和其他点都不连通了

其实脑补一下就知道,如果有两个点不连通,那么一个点的周围一定会有想围墙一样围起来的区域,而且该区域不存在连向外边的边

题目变一变就变成普及组水题了……

 1 #include <cstdio>
 2 const int size=2250225;
 3
 4 namespace IOspace
 5 {
 6     inline char getch()
 7     {
 8         register char ch;
 9         do ch=getchar(); while (ch!=‘E‘ && ch!=‘N‘);
10         return ch;
11     }
12     inline int getint()
13     {
14         register int num=0;
15         register char ch;
16         do ch=getchar(); while (ch<‘0‘ || ch>‘9‘);
17         do num=num*10+ch-‘0‘, ch=getchar(); while (ch>=‘0‘ && ch<=‘9‘);
18         return num;
19     }
20     inline void putint(bool num)
21     {
22         if (num==0) printf("TAK\n");
23         else printf("NIE\n");
24     }
25 }
26
27 int n, k;
28 inline void swap(int & x, int & y) {int t=x; x=y; y=t;}
29
30 struct node
31 {
32     int x, y;
33     inline node() {}
34     inline node(int _x, int _y):x(_x), y(_y) {}
35 };
36 inline int f(int x, int y) {if (x==0 || x==n || y==0 || y==n) return 0; return (x-1)*(n-1)+y;}
37 inline node getedge();
38
39 int r[size];
40 inline void prepare() {for (int i=0;i<n*n;i++) r[i]=i;}
41 int find(int x) {return r[x]==x?x:r[x]=find(r[x]);}
42 inline void merge(int x, int y) {x=find(x); y=find(y); r[x]=y;}
43
44 int main()
45 {
46     bool ans;
47     node T, N;
48
49     n=IOspace::getint(), k=IOspace::getint();
50     prepare();
51     ans=0;
52     for (int i=1;i<=k;i++)
53     {
54         T=getedge(); N=getedge();
55         if (ans) T=N;
56         ans=find(T.x)==find(T.y);
57         IOspace::putint(ans);
58         merge(T.x, T.y);
59     }
60
61     return 0;
62 }
63
64 inline node getedge()
65 {
66     int x=IOspace::getint(), y=IOspace::getint();
67     char c=IOspace::getch();
68     if (c==‘N‘) return node(f(x-1, y), f(x, y));
69     if (c==‘E‘) return node(f(x, y-1), f(x, y));
70 }

本傻装B系列

[AMPPZ 2013]Bytehattan,布布扣,bubuko.com

时间: 2024-10-29 03:51:14

[AMPPZ 2013]Bytehattan的相关文章

ActiveReports 9实战教程(1): 手把手搭建好开发环境Visual Studio 2013 社区版

ActiveReports9刚刚公布3天.微软就公布了 Visual Studio Community 2013 开发环境. Visual Studio Community 2013 提供完整功能的 IDE ,可开发 Windows.Android 和 iOS 应用.支持:C++, Python, HTML5, JavaScript, 和 C#,VB, F# 语言的开发.提供设计器.编辑器.调试器和诊断工具. 最牛逼的在于你全然能够免费使用该工具: 能够正大光明的免费使用visual studi

Exchange 2013迁移SOP手册

Exchange 2013迁移SOP手册 阶段1:环境部署 OUTLOOK升级方式 统计版本低于SP3的OUTLOOK客户端信息 记录计算机在域中所在OU信息 域中创建临时升级用OU,如MAILUPGRADE 采用如下命令移动计算机到MAILUPGRADE OU dsmove "CN=Aidong Qi,OU=Users,OU=TESTP,OU=Hitech,DC=hitechad,DC=com" -newparent OU=MAILUPGRADE,DC=hitechad,DC=com

Install Exchange Server 2013 on Windows Server 2008

OS 要求 Exchange Server 2013可以部署在Windows Server 2012的平台也可以部署在Windows Server 2008 R2的平台.如果部署在Windows Server 2008 R2平台要求操作系统版本为Windows Server 2008 R2 SP1的版本? 安装服务器角色 : PowerShell中执行如下命令 , 打开Windows PowerShell 运行如下命令来加载服务器管理器模块 ? Import-Module ServerMana

bzoj-3170 3170: [Tjoi 2013]松鼠聚会(计算几何)

题目链接: 3170: [Tjoi 2013]松鼠聚会 Time Limit: 10 Sec  Memory Limit: 128 MB Description 有N个小松鼠,它们的家用一个点x,y表示,两个点的距离定义为:点(x,y)和它周围的8个点即上下左右四个点和对角的四个点,距离为1.现在N个松鼠要走到一个松鼠家去,求走过的最短距离. Input 第一行给出数字N,表示有多少只小松鼠.0<=N<=10^5下面N行,每行给出x,y表示其家的坐标.-10^9<=x,y<=10^

第三周作业:Visual Studio 2013

在装Visual Studio 2013的时候,提示我升级我的电脑,不然不给安装,于是我就各种升级,完事之后有了这个: 在我耐心的等待之下终于等到安装完成: 我就建立一个新的项目: 我就写了一个简单程序进行测试: 测试用例并且测试成功: 这就是本次作业的全部过程!!!!!!!!!!!!!!!

SharePoint 2013 日历视图兼容性问题

在IE11上访问SharePoint 2013 calendar视图,发现加入兼容性视图以后访问,正常,如下图: 不加入兼容性视图IE11访问,出现兼容性问题,如下图: 因为有些环境有问题,有些环境没有问题,对比了一下,发现打补丁kb3054792,打完补丁,重启即可: 补丁地址:http://www.microsoft.com/zh-cn/download/details.aspx?id=47055 特别的,在解决这个问题之前的疯狂谷歌过程中,发现也有类似情况,要么加入兼容性视图,要么开启浏览

【国家统计局】2013年6月份-2014年5月份70个大中城市住宅销售价格变动情况

2014年5月份70个大中城市住宅销售价格变动情况 http://www.stats.gov.cn/tjsj/zxfb/201406/t20140618_569655.html (一)与上月相比,70个大中城市中,价格下降的城市有35个,持平的城市有20个,上涨的城市有15个.环比价格变动中,最高涨幅为0.3%,最低为下降1.4%. (二)与去年同月相比,70个大中城市中,价格下降的城市有1个,上涨的城市有69个.5月份,同比价格变动中,最高涨幅为11.3%,最低为下降4.8%. -------

Visual Studio 2013 无法使用:在文件中查找(Ctrl+Shift+F)

最近遇到一个问题就是在win7(32位.64位都试过)上安装Visual Studio 2013(专业版.旗舰版都试过)之后,打开项目,使用:在文件中查找(Ctrl+Shift+F)功能时,会突然奔溃. 后来,突然想到在安装的时候,右键,以管理员身份安装. 于是,尝试了一下,搞定!

Office word 2013中直接调用MathType的方法

Office word 2013中直接调用MathType的方法 | 浏览:4403 | 更新:2014-02-20 14:45 | 标签: word 使用Office word 2013的用户肯定早已注意到在编辑文档时MathType无法直接调用,但是点击文档中的公式时能够跳出MathType的公式编辑窗口.其实,这一问题可以通过简单设置让 MathType 集成到Office Word 2013中. 工具/原料 Office word 2013软件.MathType软件 方法步骤 安装Mat