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 }