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. C语言--总结报告

    1.当初你是如何做出选择计算机专业的决定的? 经过一个学期,你的看法改变了么,为什么? 你觉得计算机是你喜欢的领域吗,它是你擅长的领域吗? 为什么? 当初填报志愿我是有很明确的专业方向的,就是IT类的 ...

  2. Java 密码学算法

    Java 密码学算法 候捷老师在< 深入浅出MFC 2e(电子版)>中引用林语堂先生的一句话: 只用一样东西,不明白它的道理,实在不高明 只知道How,不知道Why,出了一点小问题时就无能 ...

  3. django获取ip与数据重复性判定

    获取ip if request.META.has_key('HTTP_X_FORWARDED_FOR'): ip_c = request.META['HTTP_X_FORWARDED_FOR'] el ...

  4. Django 博客

    blogproject/blogproject/settings.py ## 其它配置代码... # 把英文改为中文 LANGUAGE_CODE = 'zh-hans' # 把国际时区改为中国时区 T ...

  5. Django 视图层

    URL映射 1.分布式url映射 include()函数提供分布式url映射功能,使URL映射可以被编写在多个url.py文件中 from django.conf.urls import url fr ...

  6. Android网络传输中必用的两个加密算法:MD5 和 RSA 及Base64加密总结

    (1)commons-codec包简介 包含一些通用的编码解码算法.包括一些语音编码器,Hex,Base64.MD5 一.md5.base64.commons-codec包 commons-codec ...

  7. C#之Socket通信

    0.虽然之前在项目中也有用过Socket,但始终不是自己搭建的,所以对Server,Clinet端以及心跳,断线重连总没有很深入的理解,现在自己搭建了一遍加深一下理解. 服务端使用WPF界面,客户端使 ...

  8. Centos7.x:开机启动服务的配置和管理

    一.开机启动服务的配置 1.创建服务配置(权限754) vim /usr/lib/systemd/system/nginx.service 文件内容解释 [Unit]:服务的说明Description ...

  9. bad interpreter:No such file or directory 解决方法

    今天在执行一个从网上考下来的脚本的时候,出现了下面的错误: Linux下面一个脚本死活也运行不了, 我检查了数遍,不可能有错. 提示:bad interpreter:No such file or d ...

  10. Dictionary导致CPU暴涨

    中午吃完饭回来,刚想眯一会,突然发现公司预警群报警,某台机器CPU100%,连续三次报警,心里咯噔一下,我新开发的程序就在这上面,是不是我的程序导致的?立马远程,oh my god,果然是. 二话不说 ...