奇环
来源:互联网 发布:live555最新源码下载 编辑:程序博客网 时间:2024/06/11 08:00
Description
小松鼠终于吃撑了,她决定逃离这个地方。
我们用一张连通图来表示整个西湖的范围,每棵容小松鼠逗留的树都用
这张图上的一个点来表示。小松鼠能够通过只跳一次互相到达的两棵树用
图上的一条无向边来连接。
吃撑了的小松鼠有些神志不清,每次她连跳两条边之后才会在到达的那
个点上休息。她想知道,是否存在一种连续的跳法,使得她有机会在所有
的树上都休息至少一次。
对于这种跳法,你可以任选起点,允许重复经过边,允许重复经过点。
但是超萌小松鼠是一只有梦想的小松鼠,她有时能够突破自己的极限,
使一些原本无法互相到达的两个点能够通过一次跳跃互相到达。
Input
第一行两个数n,m。n表示点的个数,m表示边的条数
接下来m行,每行两个数xi,yi,表示xi和yi之间能够通过一次跳跃互相到
达。
接下来一行一个数q,表示询问的个数。
接下来q行,其中的第i行每行两个数ai,bi。表示在原图的基础上加上从ai到bi的
边。即成为一张n个点m + 1条边的图。
保证给出的原图是个连通图,1 <= ai; bi; xi; yi <= n。
Output
输出一共q行,对于第i个询问,当在原图的基础上加上ai与bi间的无向边
后,如果小松鼠能够找到一种连续的跳法,使得她有机会在所有的树上至
少休息一次,输出一行“Yes”,否则输出一行“No”。(不包含引号)
Constraints
对于前50%,n; q <= 103 , m <= 10^3。
小松鼠终于吃撑了,她决定逃离这个地方。
我们用一张连通图来表示整个西湖的范围,每棵容小松鼠逗留的树都用
这张图上的一个点来表示。小松鼠能够通过只跳一次互相到达的两棵树用
图上的一条无向边来连接。
吃撑了的小松鼠有些神志不清,每次她连跳两条边之后才会在到达的那
个点上休息。她想知道,是否存在一种连续的跳法,使得她有机会在所有
的树上都休息至少一次。
对于这种跳法,你可以任选起点,允许重复经过边,允许重复经过点。
但是超萌小松鼠是一只有梦想的小松鼠,她有时能够突破自己的极限,
使一些原本无法互相到达的两个点能够通过一次跳跃互相到达。
Input
第一行两个数n,m。n表示点的个数,m表示边的条数
接下来m行,每行两个数xi,yi,表示xi和yi之间能够通过一次跳跃互相到
达。
接下来一行一个数q,表示询问的个数。
接下来q行,其中的第i行每行两个数ai,bi。表示在原图的基础上加上从ai到bi的
边。即成为一张n个点m + 1条边的图。
保证给出的原图是个连通图,1 <= ai; bi; xi; yi <= n。
Output
输出一共q行,对于第i个询问,当在原图的基础上加上ai与bi间的无向边
后,如果小松鼠能够找到一种连续的跳法,使得她有机会在所有的树上至
少休息一次,输出一行“Yes”,否则输出一行“No”。(不包含引号)
Constraints
对于前50%,n; q <= 103 , m <= 10^3。
对于100%,n; q <= 105, m <= 10^5。
显然有奇环就是YES.然后随你怎么搞了。。
#include <cstdio> #include <cmath> #include <ctime> #include <string> #include <cstring> #include <cstdlib> #include <iostream> #include <algorithm> #define FOR(i,a,b) for((i)=(a);(i)<=(b);(i)++) #define FORP(i,a,b) for(int i=(a);i<=(b);i++) #define FORM(i,a,b) for(int i=(a);i>=(b);i--) #define maxn 100005 #define maxm 2000005 #define INF 1070000000 using namespace std; typedef long long ll; typedef unsigned long long ull; template<class T> inline void read(T& num){ num = 0; bool f = true;char ch = getchar(); while(ch < '0' || ch > '9') { if(ch == '-') f = false;ch = getchar();} while(ch >= '0' && ch <= '9') {num = num * 10 + ch - '0';ch = getchar();} num = f ? num: -num; } int out[100]; template<class T> inline void write(T x,char ch){ if (x==0) {putchar('0'); putchar(ch); return;} if (x<0) {putchar('-'); x=-x;} int num=0; while (x){ out[num++]=(x%10); x=x/10;} FORM(i,num-1,0) putchar(out[i]+'0'); putchar(ch); } /*==================split line==================*/ const double eps=1e-8; struct Edge{int to, next;}e[maxm];int n, m, sume = 0, clo = 0;bool flag = false;int first[maxm], depth[maxn], dfn[maxn], low[maxn];bool vis[maxn];void addedge(int x, int y){sume++; e[sume].to = y, e[sume].next = first[x], first[x] = sume;}void dfs(int x, int fa){vis[x] = true;depth[x] = depth[fa] + 1; for (int i = first[x]; i; i = e[i].next)if (e[i].to != fa){if (!vis[e[i].to]) dfs(e[i].to, x);else if ((depth[x] - depth[e[i].to]) % 2 == 0) flag = true;}}int main(){read(n); read(m);FORP(i, 1, m){int x, y;read(x); read(y);addedge(x, y);addedge(y, x);}dfs(1, 0);int q; read(q);if (flag) {FORP(i, 1, q) puts("Yes"); return 0;}FORP(i, 1, q){int a, b;read(a); read(b);if (depth[a] % 2 != depth[b] % 2) puts("No");else puts("Yes");}}
0 0
- 环奇
- 奇环
- csu 1356 Catch (判断奇环)
- codeforces557D 二分图+奇环判断
- 向上吧,奇奇
- 汽车打捞现场 奇!奇!!奇!!!
- poj 2942(求存在奇环的连通块)
- Catch----二分图的判定与奇环的判定
- 奇奇和小猫的故事
- ★【双连通分量】【奇环判定】Knights of the Round Table
- poj 2942 双连通+tarjan+割点+奇环判断+二分图染色
- ★ HDU 3118 二分匹配本质题,删除最少的边,使图不存在奇环
- poj2942 Knights of the Round Table,点双连通分量,奇环判断
- codeforces #311 557D D. Vitaly and Cycle (dfs+图论判断判断构造奇环)
- 【POJ2942】Knights of the Round Table-点双连通分量+判断奇环
- POJ2942-Knights of the Round Table (双联通+判断奇环)
- JBUILDERX速度奇慢
- 奇跡の海
- Java基础(二)
- 模板的全特化与偏特化
- 归档日志路径三个参数DB_RECOVERY_FILE_DEST和LOG_ARCHIVE_DEST和LOG_ARCHIVE_DEST_n 2012-06
- ak39e系列区分usb插入电源还是pc机
- 在Eclipse中安装dorado5插件
- 奇环
- JSON
- bzoj4583
- android柱状图和饼状图的的实现
- C++级数逼近
- spark 2.0 RpcHandler
- 统计用户访问网站页面的停留时间
- asp.net MVC中网页编码与解码
- 页面遮罩效果