pat甲级 1122. Hamiltonian Cycle (25)
来源:互联网 发布:淘客cms程序 编辑:程序博客网 时间:2024/04/30 20:31
The "Hamilton cycle problem" is to find a simple cycle that contains every vertex in a graph. Such a cycle is called a "Hamiltonian cycle".
In this problem, you are supposed to tell if a given cycle is a Hamiltonian cycle.
Input Specification:
Each input file contains one test case. For each case, the first line contains 2 positive integers N (2< N <= 200), the number of vertices, and M, the number of edges in an undirected graph. Then M lines follow, each describes an edge in the format "Vertex1 Vertex2", where the vertices are numbered from 1 to N. The next line gives a positive integer K which is the number of queries, followed by K lines of queries, each in the format:
n V1 V2 ... Vn
where n is the number of vertices in the list, and Vi's are the vertices on a path.
Output Specification:
For each query, print in a line "YES" if the path does form a Hamiltonian cycle, or "NO" if not.
Sample Input:6 106 23 41 52 53 14 11 66 31 24 567 5 1 4 3 6 2 56 5 1 4 3 6 29 6 2 1 6 3 4 5 2 64 1 2 5 17 6 1 3 4 5 2 67 6 1 2 5 4 3 1
Sample Output:YESNONONOYESNO题目大意:给出一副无向图<N,M>,有K个询问,每个询问包含n个点,判断这n个点组成的序列是否符合哈密顿回路。 哈密顿回路:包含图中所有节点的一条简单回路(首尾节点相同,且每个顶点只出现一次)。解题思路:对于每个询问,判断是否符合。出现以下情况就是不符合: 1、首尾节点不同 2、询问中的n节点数不等于N+1 3、路径中没有包含无向图中的所有节点 4、路径序列中相邻节点之间不连通#include <cstdio>#include <vector>#include <map>#include <set>#include <cstdlib>#include <climits>#include <cstring>#include <iostream>#include <algorithm>using namespace std;#define ll long longconst int MAXN = 200 + 5;const int INF = 0x7f7f7f7f;template <class XSD> inline XSD f_min(XSD a, XSD b) { if (a > b) a = b; return a; }template <class XSD> inline XSD f_max(XSD a, XSD b) { if (a < b) a = b; return a; }bool mp[MAXN][MAXN];bool judge(int n, int k){ int x, y; set<int>s; vector<int>v; for(int i=0; i<k; i++){ scanf("%d", &x); s.insert(x); v.push_back(x); } if(s.size()!=n || v[0]!=v[k-1] || k!=(n+1)) return false; for(int i=1; i<k; i++) if(!mp[v[i-1]][v[i]]) return false; return true;}int main(){ int n, m; int x, y; while(~scanf("%d%d", &n, &m)){ memset(mp, false, sizeof mp); for(int i=0; i<m; i++){ scanf("%d%d", &x, &y); mp[x][y] = mp[y][x] = true; } int q, k; scanf("%d", &q); while(q--){ scanf("%d", &k); if(judge(n, k)) printf("YES\n"); else printf("NO\n"); } } return 0;}
- pat甲级 1122. Hamiltonian Cycle (25)
- 1122. Hamiltonian Cycle (25) PAT 甲级
- PAT甲级 1122. Hamiltonian Cycle (25)
- PAT 甲级 1122. Hamiltonian Cycle (25)
- 1122. Hamiltonian Cycle (25)-PAT甲级真题
- PAT--1122. Hamiltonian Cycle (25)
- pat 1122. Hamiltonian Cycle (25)
- PAT-1122. Hamiltonian Cycle (25)
- 【PAT】1122. Hamiltonian Cycle
- PAT (Advanced Level) 1122. Hamiltonian Cycle (25)
- 【PAT】【Advanced Level】1122. Hamiltonian Cycle (25)
- PAT A1122 hamiltonian cycle (25)
- PAT A1122. Hamiltonian Cycle (25)
- 1122. Hamiltonian Cycle (25)
- 1122. Hamiltonian Cycle (25)
- 1122. Hamiltonian Cycle (25)
- 1122. Hamiltonian Cycle (25)
- 1122. Hamiltonian Cycle (25)
- linux/cdm下运行Java程序,出现“找不到或无法加载主类”的注意事项
- C语言 离散数学中合式公式的判断
- 将gridcontrol导出到excel
- C++ 传指针与传引用
- 使用librtmp推送AVC数据
- pat甲级 1122. Hamiltonian Cycle (25)
- oracle over(partition BY) 函数用法
- mysql 批量插入与单条插入 的效率比较
- 紫书例题 10-20 你想当2 n 元富翁吗?UVa 10900
- overlayfs移植
- Linux 下 svn diff 增加颜色
- 在windows任务栏上显示文字签名
- jquery入门级jQuery对象与dom对象之间的转换
- 脚本判断当前局域网内有多少可用ip地址