博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~
http://www.cnblogs.com/chenxiwenruo/p/6789799.html
特别不喜欢那些随便转载别人的原创文章又不给出链接的
所以不准偷偷复制博主的博客噢~~

先来扩展一下知识
哈密顿图:
哈密顿图是一个无向图,由指定的起点通往指定的重点,途中经过所有节点有且只经过一次。
在图论中,通常指的是哈密顿回路,即经过图中所有顶点有且只有一次,最终回到出发点。
哈密顿回路为NP完全问题,暂不存在多项式内的解法。

欧拉图:
类似的有欧拉图:图中经过每天边有且只有一次,若最终回到出发点,则是欧拉回路。
判断是否存在欧拉回路,是有定理的,网上可以找找。

然而这道题给出了路径,判断是否是哈密顿回路,瞬间感觉题目档次下降了好多有没有!!!
满足了以下条件即输出YES,只要有不满足的就输出NO:
1.路径节点个数等于n+1
2.相邻点之间存在连通的边
3.前n点各只出现过1次
4.第一个节点等于最后一个节点,构成回路

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <vector>
#include <cstring>
#include <queue>
using namespace std;
const int maxn=;
int edge[maxn][maxn];
int n,m;
int main()
{
int u,v;
memset(edge,,sizeof(edge));
scanf("%d %d",&n,&m);
for(int i=;i<m;i++){
scanf("%d %d",&u,&v);
edge[u][v]=edge[v][u]=;
}
int k;
scanf("%d",&k);
int n1;
int vis[maxn];
for(int i=;i<k;i++){
memset(vis,,sizeof(vis));
scanf("%d",&n1);
bool flag=true;
//必须是n+1的顶点个数
if(n1!=n+)
flag=false;
if(n1>){
scanf("%d",&u);
vis[u]=;
}
int first=u;
for(int j=;j<n1;j++){
scanf("%d",&v);
if(flag){
//得存在边
if(!edge[u][v]){
flag=false;
//break;傻了,这里怎么会写了个break,导致一个样例过不了。虽然false,但还是要继续读取数据的
}
//前n个点必须只出现过一次
if(vis[v] && j!=n1-)
flag=false;
else
vis[v]=;
}
u=v;
}
//第一个点等于最后一个点
if(v!=first)
flag=false;
if(flag)
printf("YES\n");
else
printf("NO\n");
}
return ;
}

PAT甲题题解-1122. Hamiltonian Cycle (25)-判断路径是否是哈密顿回路的更多相关文章

  1. PAT甲题题解-1051. Pop Sequence (25)-堆栈

    将1~n压入最多为m元素的栈 给出k个出栈序列,问你是否能够实现. 能输出YES 否则NO 模拟一遍即可,水题. #include <iostream> #include <cstd ...

  2. PAT甲题题解-1059. Prime Factors (25)-素数筛选法

    用素数筛选法即可. 范围long int,其实大小范围和int一样,一开始以为是指long long,想这就麻烦了该怎么弄. 而现在其实就是int的范围,那难度档次就不一样了,瞬间变成水题一枚,因为i ...

  3. PAT甲题题解-1101. Quick Sort (25)-大水题

    快速排序有一个特点,就是在排序过程中,我们会从序列找一个pivot,它前面的都小于它,它后面的都大于它.题目给你n个数的序列,让你找出适合这个序列的pivot有多少个并且输出来. 大水题,正循环和倒着 ...

  4. PAT甲题题解-1117. Eddington Number(25)-(大么个大水题~)

    如题,大水题...贴个代码完事,就这么任性~~ #include <iostream> #include <cstdio> #include <algorithm> ...

  5. PAT甲题题解-1130. Infix Expression (25)-中序遍历

    博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789828.html特别不喜欢那些随便转载别人的原创文章又不给 ...

  6. PAT甲题题解-1129. Recommendation System (25)-排序

    博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789819.html特别不喜欢那些随便转载别人的原创文章又不给 ...

  7. PAT甲题题解-1016. Phone Bills (25)-模拟、排序

    博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789229.html特别不喜欢那些随便转载别人的原创文章又不给 ...

  8. PAT甲题题解-1021. Deepest Root (25)-dfs+并查集

    dfs求最大层数并查集求连通个数 #include <iostream> #include <cstdio> #include <algorithm> #inclu ...

  9. PAT甲题题解-1024. Palindromic Number (25)-大数运算

    大数据加法给一个数num和最大迭代数k每次num=num+num的倒序,判断此时的num是否是回文数字,是则输出此时的数字和迭代次数如果k次结束还没找到回文数字,输出此时的数字和k 如果num一开始是 ...

随机推荐

  1. [python]通过uiautomator实现返回当前程序包名

    # -*- coding: utf-8 -*- from uiautomator import device as d def getCurrentPackageName(): info = d.in ...

  2. Python接口自动化--Json数据处理 5

    1.Json模块简介,全名JavaScript Object Notation,轻量级的数据交换格式,常用于http请求中. Encoding basic Python object hierarch ...

  3. loli的搜索测试-5

    今天早上听说不放假感觉很sad,又听说要考试感觉更sad了,早读的时候Juan_feng表示即使考也不会考虫食算,结果上午并没有考试,就自己做了几道题.不得不说做题的决定实在是太明智了,做NOIP历年 ...

  4. Vue入门1

    欢迎转载,转载请注明出处. 前言 学习本系列Vue知识,需要结合本系列的一些demo.你可以查看我的 Github 或者直接下载 ZIP包 . 建议学习本系列之前已经会一个其他的前端框架,了解计算属性 ...

  5. nodeJS-使用buffer类处理二进制数据

    使用buffer类处理二进制数据 在客户端javascript脚本代码中,对于二进制数据并没有提供一个很好的支持.然后在nodejs中需要处理像TCP流或文件流时,必须要处理二进制数据.因此在node ...

  6. PAT B1030 完美数列 (25 分)

    给定一个正整数数列,和正整数 p,设这个数列中的最大值是 M,最小值是 m,如果 M≤mp,则称这个数列是完美数列. 现在给定参数 p 和一些正整数,请你从中选择尽可能多的数构成一个完美数列. 输入格 ...

  7. Python2.7-pprint

    pprint 模块,提供了对数据的漂亮输出(pretty-print),它会尽量保持对象转变成字符串后只有一行,如果超过了指定的长度则会分成多行,目的就在于便于阅读和美观 模块的类: pprint.P ...

  8. jmeter.bat配置(主要关于OOM)

    jmeter.bat是jmeter在windows系统下的启动文件.在使用jmeter压测,线程数设置过多时可能会报内存溢出(Out Of Memory Error),这时候可以去尝试调整一下jmet ...

  9. AI1.1-人工智能史

    来自:http://zh.wikipedia.org/wiki/人工智能史#CITEREFBerlinski2000 这篇是来自维基百科上面的人工智能史,将其大部分保留(真的是大部分,所以差不多没有原 ...

  10. Docker学习笔记 — 开启Docker远程访问

    默认情况下,Docker守护进程会生成一个socket(/var/run/docker.sock)文件来进行本地进程通信,而不会监听任何端口,因此只能在本地使用docker客户端或者使用Docker ...