GotoAndPlay
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的更多相关文章
- FLASH CC 2015 CANVAS 中 gotoAndStop、gotoAndPlay() 不起作用
哎 话不多说先看我的代码: //舞台上 放着sp0.sp1....sp8,9个mc,每个mc都有几帧, //帧上有如下代码 var S=this; S.stop() inIt1();//not wor ...
- [模拟赛] GotoAndPlay
GotoAndPlay 10月3日,在杭州市西湖景区,一只小松鼠不停地接受一道道食物,花生. 玉米.饼干,可谓来者不拒,憨态可掬的模样吸引了众多围观者... Description 小松鼠终于吃撑了, ...
- [No000070]Flash与C#通信
注册控件 首先要插入Flash就必须使用Flash控件,在工具栏右键选择"选择项…",然后在"COM组件"面板下点击"浏览"按钮,在本机电脑 ...
- createjs学习二之flash转canvas学习1
设置发布 或者 导出参数设置 c_lib_main c_images_main/ 导出之后的文件 打开导出的html文件可以看到如下,,可以正常显示的,,只是stop了还不能动 给舞台上某一元素添加点 ...
- FlasActionScript3随学随机
1.跳转页面代码.下载代码(new URLRequest(下载地址)): var request1:URLRequest=new URLRequest("http://www.baidu.c ...
- SpriteSheet精灵动画引擎
SpriteSheet精灵动画引擎 本文介绍Flash中SpriteSheet精灵序列图与其它渲染方式的性能对比.SpriteSheet的原理及注意实现,最后实现了一个精灵序列图的渲染引擎.本文的 ...
- (转)as3效率优化
1.改进算法无论对于那一种程序,好的算法总是非常重要的,而且能够极大地提高程序性能,所以任何性能的优化第一步就是从算法或者说程序逻辑的优化开始,检查自己的程序是否有多余的运算,是否在没有必要的时候做了 ...
- FLASH CC 2015 CANVAS (五)loading的制作
注意 此贴 为个人边“开荒”边写,所以不保证就是最佳做法,也难免有错误! 正式教程会在后续开始更新 AS3的loading一般我们都写在时间轴第一帧,但是FLASH CC CANVAS的导出项目的lo ...
- 集成骨骼动画Spine的几点经验
最近开始用cantk做些复杂的游戏,其中一个游戏的DragonBones骨骼动画的JSON文件就达600K,导出之后显示各种不正常,可能是太复杂了,有些方面达到了DragonBones的极限.拿到官方 ...
随机推荐
- 2017-2018-1 Java演绎法 第三周 作业
团队任务:团队展示与选题 团队展示 队员学号及姓名 学号 姓名 主要负责工作 20162315 马军 日常统计,项目部分代码 20162316 刘诚昊 项目部分代码,代码质量测试 20162317 袁 ...
- 张旭升20162329 2006-2007-2 《Java程序设计》第一周学习总结
20162329 2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 通过打书上的代码熟悉了Java编程的基本过程 教材学习中的问题和解决过程 1.因为我的虚拟机 ...
- django模板(一)
模板(一) 实验简介 在前一章中,你可能已经注意到我们在例子视图中返回文本的方式有点特别. 也就是说,HTML被直接硬编码在 Python 代码之中. def current_datetime(req ...
- python的Collections 模块
Collections 模块 知识点 Counter 类 defaultdict 类 namedtuple 类 在这个实验我们会学习 Collections 模块.这个模块实现了一些很好的数据结构,它 ...
- DML数据操作语言之查询(一)
1.select语句基础 基本语句格式: select <列名>,.... from <表名>; select子句中列举出希望从表中查询出的列的名称,from子句则指定了选取 ...
- 洛谷P2894 [USACO08FEB]酒店Hotel
P2894 [USACO08FEB]酒店Hotel https://www.luogu.org/problem/show?pid=2894 题目描述 The cows are journeying n ...
- hadoop基础教程免费分享
提起Hadoop相信大家还是很陌生的,但大数据呢?大数据可是红遍每一个角落,大数据的到来为我们社会带来三方面变革:思维变革.商业变革.管理变革,各行业将大数据纳入企业日常配置已成必然之势.阿里巴巴创办 ...
- mongodb监控工具mongostat
mongostat的使用及命令详解 mongostat是mongodb自带的状态检测工具,在命令行下使用,会间隔固定时间获取mongodb的当前运行状态,并输出. 1.常用命令格式: mongosta ...
- 04_Linux目录文件操作命令1(mv ls cd...)_我的Linux之路
上一节已经给大家讲了Linux的目录结构,相信大家已经对Linux的整个目录结构有所了解 现实中,服务器(包含Linux,Unix,windows server)一般都摆放在机房里,因为一个机房摆放了 ...
- Mac使用brew安装软件
Homebrew官方网站:https://brew.sh/1,安装brew,Mac中打开Termal输入命令: /usr/bin/ruby -e "$(curl -fsSL https:// ...