1
- #include < cstdio>
1
+ #include < iostream>
2
+ #include < set>
2
3
#include < vector>
3
4
using namespace std ;
4
- int n, kn;
5
- vector<int > v;
6
- vector<vector<int >> graph;
7
- int isConnected () {
8
- int pre = v[0 ];
9
- for (int i = 1 ; i < kn; i++) {
10
- if (graph[pre ][v[i]] != 1 ) return 0 ;
11
- pre = v[i];
12
- }
13
- return 1 ;
14
- }
15
- int isHamilt () {
16
- if (v[0 ] != v[kn-1 ]) return 0 ;
17
- vector<int > times (kn, 0 );
18
- for (int i = 0 ; i < kn; i++)
19
- times[v[i]]++;
20
- for (int i = 1 ; i < kn; i++)
21
- if ((i == v[0 ] && times[i] != 2 ) || (i != v[0 ] && times[i] != 1 )) return 0 ;
22
- return 1 ;
23
- }
24
5
int main () {
25
- int m, k, a, b ;
26
- scanf ( " %d %d " , &n, &m) ;
27
- graph. resize (n+ 1 , vector< int >(n+ 1 , 0 ));
28
- for ( int i = 0 ; i < m; i++) {
29
- scanf (" %d %d" , &a , &b );
30
- graph[a][b ] = graph[b][a ] = 1 ;
6
+ int n, m, cnt, k, a[ 210 ][ 210 ] = { 0 } ;
7
+ cin >> n >> m ;
8
+ for ( int i = 0 ; i < m; i++) {
9
+ int t1, t2;
10
+ scanf (" %d%d" , &t1 , &t2 );
11
+ a[t1][t2 ] = a[t2][t1 ] = 1 ;
31
12
}
32
- scanf (" %d" , &k);
33
- for (int i = 0 ; i < k; i++) {
34
- scanf (" %d" , &kn);
35
- v.resize (kn);
36
- for (int j = 0 ; j < kn; j++)
37
- scanf (" %d" , &v[j]);
38
- printf (" %s\n " , (kn == n + 1 && isConnected () && isHamilt ()) ? " YES" : " NO" );
13
+ cin >> cnt;
14
+ while (cnt--) {
15
+ cin >> k;
16
+ vector<int > v (k);
17
+ set<int > s;
18
+ int flag1 = 1 , flag2 = 1 ;
19
+ for (int i = 0 ; i < k; i++) {
20
+ scanf (" %d" , &v[i]);
21
+ s.insert (v[i]);
22
+ }
23
+ if (s.size () != n || k - 1 != n || v[0 ] != v[k-1 ]) flag1 = 0 ;
24
+ for (int i = 0 ; i < k - 1 ; i++)
25
+ if (a[v[i]][v[i+1 ]] == 0 ) flag2 = 0 ;
26
+ printf (" %s" ,flag1 && flag2 ? " YES\n " : " NO\n " );
39
27
}
40
28
return 0 ;
41
29
}
0 commit comments