// Marcin Knapik #pragma GCC optimize ("O3") #include<bits/stdc++.h> using namespace std; #define FOR(i, n) for (int i = 0; i < n; i++) #define f first #define s second #define pb push_back #define all(s) s.begin(), s.end() #define sz(s) (int)s.size() using ll = long long; using vi = vector<int>; int n, m, k; void solve () { cin >> n >> m >> k; vi ory(n); int OR = 0; int mini = 31; assert(m <= 30); int whole_set = (1 << m) - 1; for(int i = 0; i < m; i++){ int a, b; cin >> a >> b; a--, b--; ory[a] += (1 << i); ory[b] += (1 << i); } for(int mask = 1; mask < (1 << n); mask++){ if(__builtin_popcount(mask) > mini) continue; int temp_or = 0; for(int j = 0; j < n; j++){ if(mask & (1 << j)){ temp_or |= ory[j]; } } if(temp_or == whole_set){ if(__builtin_popcount(mask) < mini){ OR = mask; mini = __builtin_popcount(mask); } else { OR |= mask; } } } if(mini <= k){ cout << mini << ' ' << __builtin_popcount(OR) << '\n'; for(int i = 0; i < n; i++){ if(OR & (1 << i)){ cout << i + 1 << ' '; } } cout << '\n'; } else { cout << -1 << '\n'; } } int main () { ios::sync_with_stdio(0); cin.tie(0); int tests = 1; cin >> tests; for (int test = 1; test <= tests; test++) { solve(); } return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | // Marcin Knapik #pragma GCC optimize ("O3") #include<bits/stdc++.h> using namespace std; #define FOR(i, n) for (int i = 0; i < n; i++) #define f first #define s second #define pb push_back #define all(s) s.begin(), s.end() #define sz(s) (int)s.size() using ll = long long; using vi = vector<int>; int n, m, k; void solve () { cin >> n >> m >> k; vi ory(n); int OR = 0; int mini = 31; assert(m <= 30); int whole_set = (1 << m) - 1; for(int i = 0; i < m; i++){ int a, b; cin >> a >> b; a--, b--; ory[a] += (1 << i); ory[b] += (1 << i); } for(int mask = 1; mask < (1 << n); mask++){ if(__builtin_popcount(mask) > mini) continue; int temp_or = 0; for(int j = 0; j < n; j++){ if(mask & (1 << j)){ temp_or |= ory[j]; } } if(temp_or == whole_set){ if(__builtin_popcount(mask) < mini){ OR = mask; mini = __builtin_popcount(mask); } else { OR |= mask; } } } if(mini <= k){ cout << mini << ' ' << __builtin_popcount(OR) << '\n'; for(int i = 0; i < n; i++){ if(OR & (1 << i)){ cout << i + 1 << ' '; } } cout << '\n'; } else { cout << -1 << '\n'; } } int main () { ios::sync_with_stdio(0); cin.tie(0); int tests = 1; cin >> tests; for (int test = 1; test <= tests; test++) { solve(); } return 0; } |