Skip to content

Commit

Permalink
🔨 refactor: refactor code
Browse files Browse the repository at this point in the history
  • Loading branch information
liuchuo committed Sep 1, 2018
1 parent 5af49a3 commit b06ec7c
Showing 1 changed file with 22 additions and 34 deletions.
56 changes: 22 additions & 34 deletions AdvancedLevel_C++/1122. Hamiltonian Cycle (25).cpp
Original file line number Diff line number Diff line change
@@ -1,41 +1,29 @@
#include <cstdio>
#include <iostream>
#include <set>
#include <vector>
using namespace std;
int n, kn;
vector<int> v;
vector<vector<int>> graph;
int isConnected() {
int pre = v[0];
for (int i = 1; i < kn; i++) {
if (graph[pre][v[i]] != 1) return 0;
pre = v[i];
}
return 1;
}
int isHamilt() {
if (v[0] != v[kn-1]) return 0;
vector<int> times(kn, 0);
for (int i = 0; i < kn; i++)
times[v[i]]++;
for (int i = 1; i < kn; i++)
if ((i == v[0] && times[i] != 2) || (i != v[0] && times[i] != 1)) return 0;
return 1;
}
int main() {
int m, k, a, b;
scanf("%d %d", &n, &m);
graph.resize(n+1, vector<int>(n+1, 0));
for (int i = 0; i < m; i++) {
scanf("%d %d", &a, &b);
graph[a][b] = graph[b][a] = 1;
int n, m, cnt, k, a[210][210] = {0};
cin >> n >> m;
for(int i = 0; i < m; i++) {
int t1, t2;
scanf("%d%d", &t1, &t2);
a[t1][t2] = a[t2][t1] = 1;
}
scanf("%d", &k);
for (int i = 0; i < k; i++) {
scanf("%d", &kn);
v.resize(kn);
for (int j = 0; j < kn; j++)
scanf("%d", &v[j]);
printf("%s\n", (kn == n + 1 && isConnected() && isHamilt()) ? "YES" : "NO");
cin >> cnt;
while(cnt--) {
cin >> k;
vector<int> v(k);
set<int> s;
int flag1 = 1, flag2 = 1;
for(int i = 0; i < k; i++) {
scanf("%d", &v[i]);
s.insert(v[i]);
}
if(s.size() != n || k - 1 != n || v[0] != v[k-1]) flag1 = 0;
for(int i = 0; i < k - 1; i++)
if(a[v[i]][v[i+1]] == 0) flag2 = 0;
printf("%s",flag1 && flag2 ? "YES\n" : "NO\n");
}
return 0;
}

0 comments on commit b06ec7c

Please sign in to comment.