一天fly正坐在课堂上发呆,突然,他注意到了桌面上的一个字符串S1S2S3S4...Sn,这个字符串只由字符"a","b"和"c"构成。刚好这堂课很无聊,所以他决定为这个字符串画一张图,(这张图上的每个点代表字符串中的一个字符,例如节点1代表S1。)这张图有以下特点:

1.它有n个点,从1到n进行标号。
2.对于图上任意的两个点i和j(i ≠ j),当两者代表的字符在字典序顺序上相邻或者相等的时候,会被连上一条边。也就是说,"a"-"b", "a"-"a"这类的,它们间会有一条边相连,而"a"-"c"这类的就没有边相连。

fly根据这个字符串画出了图,随后把原先的字符串擦除了,于是桌面只留下了图。xf听说了fly的光荣事迹,第二天决定去一睹真迹,于是他来到了fly那天所在的教室的那张桌子前,然而眼前的一幕让他惊呆了:桌子上出现了好多幅图,显然这是某个别有用心的同学(GooZy?)私自画上去的。这可急坏了xf,于是他想请你帮他找出哪幅才是fly真迹。

输入

输入包含多组数据。第一行为一个整数T(1 ≤ T ≤ 100),代表数据组数,对于每组数据: 第一行是两个整数n和m( 1 ≤ n ≤ 500, 0 ≤ m ≤ n(n − 1)/2 ),分别代表图上点的个数和边的个数。
然后是m行,每行两个整数uivi ( 1 ≤ ui, vi ≤ n, ui ≠ vi ),代表图上的一条边所连接的两个点。输入保证没有重边。

输出

如果是fly真迹,即这张图是由题目描述中的字符串构成的,则输出“Yes”,否则输出“No”(不包含双引号)。

样例输入

3

2 1
1 2

4 3
1 2
1 3
1 4

4 4
1 2
1 3
1 4
2 3

样例输出

Yes
No
Yes

HINT

对于样例1,fly见到的字符串可能长这个样子:aa, bb, cc...
对于样例2,结点1和其它所有的点相连,但是结点2、3、4互不相连,这说明这三者互不相邻,而我们只有三个字符,不可能存在这样的字符串满足这张图,所以这幅图不是fly的真迹。
对于样例3,我们可以构造这样的字符串“baac”来满足这张图。

------------------------------------------------------我是分割线^_^------------------------------------------------------------

题目大意:一个点可能为a、b、c三个值,字典序相邻的点之间必须有一条边,给出一些点组成的图,判定这个图是否合法。

解题思路:从反面考虑,没有连边的点对,一定是一个为a、一个为c,所以问题就转化成了二分图判定。但是要注意,染色

之后,颜色相同的点之间必须有边,颜色不同的点之间不能有边。

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<vector>
#include<queue>
#include<cctype>
using namespace std; #define Int __int64
#define INF 0x3f3f3f3f const int MAXN = 555;
int maze[MAXN][MAXN];
int color[MAXN];
bool ans; void BFS(int t, int n) {
queue<int>q;
while (!q.empty()) q.pop();
color[t] = 1;
bool app = true;//用来确定是否还原标记= =,就是少了这一点
q.push(t);
while (!q.empty()) {
int now = q.front();
q.pop();
for (int i = 1; i <= n; i++) {
if (now == i) continue;
if (!maze[now][i] && color[i] == -1) {
app = false;
q.push(i);
color[i] = !color[now];
}
if (!maze[now][i] && color[now] == color[i]) {
ans = false;
return ;
}
}
}
if (app) color[t] = -1;
} int main()
{
//freopen("input.txt", "r", stdin);
int cas;
while (scanf("%d", &cas) != EOF) {
while (cas--) {
memset(maze, 0, sizeof(maze));
memset(color, -1, sizeof(color));
int n, m;
scanf("%d %d", &n, &m);
int u, v;
for (int i = 0; i < m; i++) {
scanf("%d %d", &u, &v);
maze[u][v] = maze[v][u] = 1;
}
ans = true;
for (int i = 1; i <= n; i++) {
//判断负一,如果该点没有被染色,就开始对其进行染色= =
if (color[i] == -1) {
BFS(i, n);
}
}
for (int i = 1; i <= n; i++) {
if (!ans) break;
for (int j = 1; j <= n; j++) {
if (i == j || color[i] == -1 || color[j] == -1) continue;//判断条件
if (maze[i][j] && color[i] != color[j]) {
ans = false;
break;
}
if (!maze[i][j] && color[i] == color[j]) {
ans = false;
break;
}
}
}
if (ans) printf("Yes\n");
else printf("No\n");
}
}
return 0;
}

图论 - 寻找fly真迹的更多相关文章

  1. 【DFS】【图论】NOIP2014寻找道路

    [NOIP2014]寻找道路 题目描述 Description 在有向图G中,每条边的长度均为1,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1.路径上的所有点的出边所 ...

  2. [NOIP2014]寻找道路(图论)

    题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点连通. 2 .在满足条 ...

  3. NOIp 2014 #3 寻找道路 Label:图论

    题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点连通. 2 .在满足条 ...

  4. $Noip2014/Luogu2296$ 寻找道路 图论

    $Luogu$ $Sol$ 首先找出符合条件一的点然后跑$SPFA$就好了叭. 如何判断点是否符合条件一呢?先连反边,记录每个点的入度,然后从终点开始$dfs$,记录每个点被到达的次数,若到达的次数等 ...

  5. [转] POJ图论入门

    最短路问题此类问题类型不多,变形较少 POJ 2449 Remmarguts' Date(中等)http://acm.pku.edu.cn/JudgeOnline/problem?id=2449题意: ...

  6. Codevs 2776 寻找代表元(二分图匹配)

    2776 寻找代表元 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题目描述 Description 广州二中苏元实验学校一共有n个社团,分别用1到n编号. 广州二 ...

  7. Cocos2d-x 地图步行实现1:图论Dijkstra算法

    下一节<Cocos2d-x 地图行走的实现2:SPFA算法>: http://blog.csdn.net/stevenkylelee/article/details/38440663 本文 ...

  8. 图论基础之Dijkstra算法的初探

         图论,顾名思义就是有图有论.        图:由点"Vertex"和边"Edge "组成,且图分为有向图和无向图(本文讨论有向图),之前做毕业设计的 ...

  9. Matlab中图论工具箱的应用

    Matlab图论工具箱的命令见表1 表1  matlab图论工具箱的相关命令 命令名 功能 graphallshortestpaths 求图中所有顶点对之间的最短距离 graphconncomp 找无 ...

随机推荐

  1. 报错注入分析之updatexml注入

    PS:今天元旦,家里打来电话说,今年春节要回老家.心里倍感恐惧.可以清楚的感觉得到父母说话的气息没有底气.大概如同我一样是恐惧吧.加油吧!努力赚钱! 先丢一篇很不错的文章:http://www.moo ...

  2. mapReduce的shuffle过程

    http://www.jianshu.com/p/c97ff0ab5f49 总结shuffle 过程: map端的shuffle: (1)map端产生数据,放入内存buffer中: (2)buffer ...

  3. 解决mysql Table ‘xxx’ is marked as crashed and should be repaired的问题。

    解决mysql Table 'xxx' is marked as crashed and should be repaired的问题. 某个表在进行数据插入和更新时突然出现Table 'xxx' is ...

  4. java多线程中关于join方法的使用

    Thread的非静态方法join()让一个线程B"加入"到另外一个线程A的尾部.在A执行完毕之前,B不能工作.例如:         Thread t = new MyThread ...

  5. js_面向对象

    面向对象的语言有一个标志,即拥有类的概念,抽象实例对象的公共属性与方法,基于类可以创建任意多个实例对象,一般具有封装.继承.多态的特性!但JS中对象与纯面向对象语言中的对象是不同的,ECMA标准定义J ...

  6. Android JNI总结

    @Dlive 0x01 JNI介绍 JNI是Java Native Interface的缩写,JNI不是Android专有的东西,它是从Java继承而来,但是在Android中,JNI的作用和重要性大 ...

  7. mina中游戏客户端服务端数据交互流程

    ====================================================================================CLIENT    encode ...

  8. bootstrap-select js jQuery控制select属性变化

    bootstrap-select我想大家都不陌生是一个前端下拉框的插件非常好用,在select的标签中设置属性可以做很多功能控制,不过初始化之后怎么去修改网上找遍中文英文也没有一个交代自己研究好久研究 ...

  9. 由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射。

    第一步: windows 8系统,运行aspx页面出现上述错误信息,解决办法如下: iis7 :控制面板->打开或关闭windows功能->Internet信息服务->万维网服务-& ...

  10. 前端工具gulp使用

    一.构建gulp环境 1.下载nodejs gulp基于node.js,要通过nodejs的npm安装gulp,所以要先安装node.js环境.(英文官网/中文官网链接). 通过cmd命令窗口确定安装 ...