一天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. C#操作日志

    首先引用NLog的dll文件 using System.IO; using NLog; -------------------------------------------------------- ...

  2. 耿丹CS16-2班第六次作业汇总

    Deadline: 2016-11-13 11:59 作业内容 第六次作业总结 00.本次题目分值最高为**6分/题 × 7题 + 5分/篇 × 1篇 = 47分**,其中有新解法者每题加原创分**2 ...

  3. svg + d3

    为了实现元素的添加,删除,拖拽,左键点击,右键单击,悬浮等功能,使用了d3 + svg 的技术来实现界面. 最开始是采用canvas,但是由于功能原因放弃了该技术,可以看下 canvas简介 另附:c ...

  4. Mysql Sql语句令某字段值等于原值加上一个字符串

    MySQL连贯字符串不能利用加号(+),而利用concat. 比方在aa表的name字段前加字符'x',利用: update aa set name=concat('x',name); 替换: UPD ...

  5. 《转载》GET,POST,PUT,DELETE的区别

    本文转载自:转载请说明出处,谢谢[hyddd(http://www.cnblogs.com/hyddd/)] Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT, ...

  6. Unity3D 原生Android结合UnityPlayerActivity开发遇到的问题

    需求是原生Android 的Activity启动UnityPlayerActivity,按Back键后返回原来的Activity 1.在AndroidManifest.xml中的UnityPlayer ...

  7. 重视blog备份——兼记我与CSDN的爱恨情仇

    痛定思痛,终于决定--逐渐备份.迁移CSDN博客到"博客园". 缘起 前几年比较喜欢逛csdn的bbs,虽然之前在cnblogs也注册了账号,但一直用CSDN博客比较多.本来一直用 ...

  8. hibernate整合spring事务异常

    Write operations are not allowed in read-only mode (FlushMode.MANUAL): Turn your Session into FlushM ...

  9. Glassfish在SpringMVC服务端接收请求时字符出现乱码的解决办法

    环境描述 前端:jsp 后端:SpringMVC Controller 尽管jsp页面已设置了pageEncoding: <%@page contentType="text/html& ...

  10. 如何将 NavigationBar 的半透明效果关闭?

    如何将 NavigationBar 的半透明效果关闭?只需三行代码就可以:self.navigationController.navigationBar.barTintColor = [UIColor ...