1122 Hamiltonian Cycle (25 分)

 

 1 #pragma warning(disable:4996)
 2 #define _CRT_SECURE_NO_WARNINGS
 3 
 4 #include <iostream>
 5 #include <algorithm>
 6 #include <cmath>
 7 #include <vector>
 8 #include <map>
 9 #include <set>
10 #include <unordered_set>
11 #include <unordered_map>
12 #include <queue>
13 #include <cmath>
14 #include <string>
15 using namespace std;
16 vector<int> edge[210];
17 int main()
18 {
19     int n, m, k;
20     cin >> n >> m;
21     for (int i = 0; i < m; ++i) {
22         int a, b;
23         cin >> a >> b;
24         edge[a].push_back(b);
25         edge[b].push_back(a);
26     }
27     cin >> k;
28     for (int i = 0; i < k; ++i) {
29         int num;
30         cin >> num;
31         vector<int> v(num);
32         set<int> s;
33         for (int j = 0; j < num; ++j) {
34             cin >> v[j];
35         }
36         int flag = 0;
37         if (n == num-1) 
38             if (v.front() == v.back())
39                 for (int i = 1; i < v.size(); ++i) {
40                     if (find(edge[v[i - 1]].begin(), edge[v[i - 1]].end(), v[i]) == edge[v[i - 1]].end()) {
41                         flag = 1;
42                         break;
43                     }
44                 }
45             else flag = 1;
46         else flag = 1;
47         if(!flag)
48             for (int i = 0; i < v.size() - 1; ++i) {
49                 if (s.find(v[i]) != s.end()) {
50                     flag = 1;
51                     break;
52                 }
53                 else {
54                     s.insert(v[i]);
55                 }
56             }
57         if (!flag) cout << "YES" << endl;
58         else cout << "NO" << endl;
59     }
60     return 0;
61 }

 

posted @ 2021-03-03 10:50  幻想Elapse  阅读(51)  评论(0编辑  收藏  举报