10月3日,在杭州市西湖景区,一只小松鼠不停地接受一道道食物,花生、
玉米、饼干,可谓来者不拒,憨态可掬的模样吸引了众多围观者...
Description  
 小松鼠终于吃撑了,她决定逃离这个地方。
 我们用一张连通图来表示整个西湖的范围,每棵容小松鼠逗留的树都用
这张图上的一个点来表示。小松鼠能够通过只跳一次互相到达的两棵树用
图上的一条无向边来连接。
 吃撑了的小松鼠有些神志不清,每次她连跳两条边之后才会在到达的那
个点上休息。她想知道,是否存在一种连续的跳法,使得她有机会在所有
的树上都休息至少一次。
 对于这种跳法,你可以任选起点,允许重复经过边,允许重复经过点。
 但是超萌小松鼠是一只有梦想的小松鼠,她有时能够突破自己的极限,
使一些原本无法互相到达的两个点能够通过一次跳跃互相到达。
Input  
 第一行两个数n,m。n表示点的个数,m表示边的条数
 接下来m行,每行两个数x i ,y i ,表示x i 和y i 之间能够通过一次跳跃互相到
达。
 接下来一行一个数q,表示询问的个数。
 接下来q行,其中的第i行每行两个数a i ,b i 。表示在原图的基础上加上从a i 到b i 的
边。即成为一张n个点m + 1条边的图。
 保证给出的原图是个连通图,1 <= a i , b i , x i , y i <= n。
Output  
 输出一共q行,对于第i个询问,当在原图的基础上加上a i 与b i 间的无向边
后,如果小松鼠能够找到一种连续的跳法,使得她有机会在所有的树上至
少休息一次,输出一行“Yes”,否则输出一行“No” 。 (不包含引号)
Constraints  
 对于前50%,n, q <= 10 3 , m <= 2 × 10 3 。
 对于100%,n, q <= 10 5 , m <= 2 × 10 5 。

样例输入:

2 1
1 2
2
1 1  
1 2

样例输出:

Yes
No

黑白染色,从一开始黑白染色,显然颜色相同就能从一个到另一个休息

那么我们发现两个相邻节点颜色相同,就说明黑白互通了,那么说明可以输出Yes

满足以上条件则flag=1

如果flag=0且a的颜色不等于b则输出No

这里给出原题题解参考:

%%%%%YZD  OTZ

考虑如果给出的图是二分图,那么我们任定起点,无论跳跃多少次始终只能到达与起点在同一边的点,对于>1个点的连通图而言,显然是有点不能够“休息”到的。

考虑如果给出的图不是二分图,那么图内必然存在奇环。就算除该奇环外的部分属于二分图,只要在其中的某一边的所有点上休息过后,在奇环上绕一圈再出去就能够到达另一边的点。因此能够达到目标。

我们把回答转化成二分图的判定之后,再来考虑询问如何处理。

首先最暴力的做法是每次读入一条边之后和原图一起再做一次二分图判定。

由于每次都是在原图的基础上加一条边的,所以每次对于原图部分的判定显得尤其浪费。我们可以往保留原图信息的方向考虑这个问题。

我们对原图进行二分图染色,如果它不是二分图,那么加入任何边都不可能使它重新变回二分图,因此只要输出q个“Yes”即可。

接下来我们所讨论的都是原图是二分图的情况。

我们考虑读进来的一条边(x, y),如果x和y在原图上属于同一种颜色,那么加上这条边相当于在二分图的同侧点间加了一条边,破坏了二分图的性质,因此输出“Yes”

否则如果属于不同的颜色,相当于在二分图的两侧间连了一条边,它还是个二分图,因此输出“No”

这样的方法刚开始可以用Bfs预处理,每次回答询问是O(1)的

因此时间复杂度为O(m + q)

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct Node
{
int next,to;
}edge[];
int num,head[],n,m,q,vis[];
bool flag;
void add(int u,int v)
{
num++;
edge[num].next=head[u];
head[u]=num;
edge[num].to=v;
}
void dfs(int x)
{int i;
for (i=head[x];i;i=edge[i].next)
{
int v=edge[i].to;
if (vis[v]==)
{
if (vis[x]==)
vis[v]=;
else vis[v]=;
dfs(v);
}
else
{
if (vis[x]==vis[v])
{
flag=;
}
}
}
}
int main()
{int i,x,y;
cin>>n>>m;
for (i=;i<=m;i++)
{
scanf("%d%d",&x,&y);
add(x,y);add(y,x);
}
vis[x]=;
dfs();
cin>>q;
while (q--)
{
scanf("%d%d",&x,&y);
if (vis[x]==vis[y])
{
printf("Yes\n");
}
else if (flag) printf("Yes\n");
else printf("No\n");
}
}

GotoAndPlay的更多相关文章

  1. FLASH CC 2015 CANVAS 中 gotoAndStop、gotoAndPlay() 不起作用

    哎 话不多说先看我的代码: //舞台上 放着sp0.sp1....sp8,9个mc,每个mc都有几帧, //帧上有如下代码 var S=this; S.stop() inIt1();//not wor ...

  2. [模拟赛] GotoAndPlay

    GotoAndPlay 10月3日,在杭州市西湖景区,一只小松鼠不停地接受一道道食物,花生. 玉米.饼干,可谓来者不拒,憨态可掬的模样吸引了众多围观者... Description 小松鼠终于吃撑了, ...

  3. [No000070]Flash与C#通信

    注册控件 首先要插入Flash就必须使用Flash控件,在工具栏右键选择"选择项…",然后在"COM组件"面板下点击"浏览"按钮,在本机电脑 ...

  4. createjs学习二之flash转canvas学习1

    设置发布 或者 导出参数设置 c_lib_main c_images_main/ 导出之后的文件 打开导出的html文件可以看到如下,,可以正常显示的,,只是stop了还不能动 给舞台上某一元素添加点 ...

  5. FlasActionScript3随学随机

    1.跳转页面代码.下载代码(new URLRequest(下载地址)): var request1:URLRequest=new URLRequest("http://www.baidu.c ...

  6. SpriteSheet精灵动画引擎

    SpriteSheet精灵动画引擎   本文介绍Flash中SpriteSheet精灵序列图与其它渲染方式的性能对比.SpriteSheet的原理及注意实现,最后实现了一个精灵序列图的渲染引擎.本文的 ...

  7. (转)as3效率优化

    1.改进算法无论对于那一种程序,好的算法总是非常重要的,而且能够极大地提高程序性能,所以任何性能的优化第一步就是从算法或者说程序逻辑的优化开始,检查自己的程序是否有多余的运算,是否在没有必要的时候做了 ...

  8. FLASH CC 2015 CANVAS (五)loading的制作

    注意 此贴 为个人边“开荒”边写,所以不保证就是最佳做法,也难免有错误! 正式教程会在后续开始更新 AS3的loading一般我们都写在时间轴第一帧,但是FLASH CC CANVAS的导出项目的lo ...

  9. 集成骨骼动画Spine的几点经验

    最近开始用cantk做些复杂的游戏,其中一个游戏的DragonBones骨骼动画的JSON文件就达600K,导出之后显示各种不正常,可能是太复杂了,有些方面达到了DragonBones的极限.拿到官方 ...

随机推荐

  1. 使用 memoryview 和 struct 查看一个 GIF 图像的首部

    >>> import struct >>> fmt = '<3s3sHH' # ➊ >>> with open('filter.gif', ...

  2. 201621123027 《Java程序设计》第1周学习总结

    01621123027 <Java程序设计>第1周学习总结 1.本周学习总结 关键词:总概.承接.面向对象化 ​ 我认为第一周的Java学习是一些总结概括性质的内容,在比较联系之前学习过的 ...

  3. HNOI 2012 永无乡

    codevs 1477 永无乡 http://codevs.cn/problem/1477/ 2012年湖南湖北省队选拔赛  时间限制: 1 s  空间限制: 128000 KB   题目描述 Des ...

  4. [SDOI2014]旅行

    洛谷 P3313 [SDOI2014]旅行 https://www.luogu.org/problem/show?pid=3313 题目描述 S国有N个城市,编号从1到N.城市间用N-1条双向道路连接 ...

  5. bzoj千题计划245:bzoj1095: [ZJOI2007]Hide 捉迷藏

    http://www.lydsy.com/JudgeOnline/problem.php?id=1095 查询最远点对,带修改 显然可以用动态点分治 对于每个点,维护两个堆 堆q1[x] 维护 点分树 ...

  6. javascript参数传递中处理+号

    在传值过程中,如果+号也是值的一部分,那就需要对+号进行处理.否则+号会被过滤掉. 处理方式:只需要把js中传过去的+号替换成base64 编码 %2B encodeURI(str).replace( ...

  7. ExtJs6级联combo的实现

    父类获取子类进行操作 { xtype: 'combo', store: Common.Dic.getDicData("IMAGE_BIG_TYPE") , multiSelect: ...

  8. js 中bind

    function fn(a){ this.innerHTML = a; console.log(this); } //fn("hello"); span1.onclick =fun ...

  9. [UWP]针对UWP程序多语言支持的总结,含RTL

    UWP 对 Globalization and localization 的支持非常好,可以非常容易地实现应用程序本地化. 所谓本地化,表现最为直观的就是UI上文字和布局方式了,针对文字,提供不同的语 ...

  10. 新手解决jsp页面<%@报错的方法

    昨天菇凉我很崩溃的重装电脑系统(嗯,没错,第一次自己装系统,我可能是一个假的计算机系学生!),但这没难倒天生聪慧的我,都是小case~.这都不是重点,重点来了,当我火速配置好java的开发环境jdk, ...