fork(1) download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. void solve() {
  5. int n;
  6. int m;
  7. cin >> n >> m;
  8.  
  9. vector<vector<int>> folders(n);
  10. vector<int> page_counts(m + 1, 0);
  11.  
  12. for (int i = 0; i < n; ++i) {
  13. int li;
  14. cin >> li;
  15. folders[i].resize(li);
  16. for (int j = 0; j < li; ++j) {
  17. cin >> folders[i][j];
  18. page_counts[folders[i][j]]++;
  19. }
  20. }
  21.  
  22. for (int i = 1; i <= m; ++i) {
  23. if (page_counts[i] == 0) {
  24. cout << "NO" << endl;
  25. return;
  26. }
  27. }
  28.  
  29. vector<bool> is_essential(n, false);
  30. for (int i = 0; i < n; ++i) {
  31. for (int page : folders[i]) {
  32. if (page_counts[page] == 1) {
  33. is_essential[i] = true;
  34. break;
  35. }
  36. }
  37. }
  38.  
  39. vector<bool> pages_covered(m + 1, false);
  40. int non_essential_count = 0;
  41. for (int i = 0; i < n; ++i) {
  42. if (is_essential[i]) {
  43. for (int page : folders[i]) {
  44. pages_covered[page] = true;
  45. }
  46. } else {
  47. non_essential_count++;
  48. }
  49. }
  50.  
  51. for (int i = 1; i <= m; ++i) {
  52. if (!pages_covered[i]) {
  53. cout << "NO" << endl;
  54. return;
  55. }
  56. }
  57.  
  58. if (non_essential_count >= 2) {
  59. cout << "YES" << endl;
  60. } else {
  61. cout << "NO" << endl;
  62. }
  63. }
  64.  
  65. int main() {
  66. ios_base::sync_with_stdio(false);
  67. cin.tie(NULL);
  68.  
  69. int test_cases;
  70. cin >> test_cases;
  71. while (test_cases--) {
  72. solve();
  73. }
  74.  
  75. return 0;
  76. }
Success #stdin #stdout 0.01s 5320KB
stdin
6
3 2
2 1 2
1 1
1 2
4 10
3 1 2 3
2 4 5
1 6
4 7 8 9 10
2 5
4 1 2 3 4
4 1 2 3 4
5 5
5 1 2 3 4 5
5 1 2 3 4 5
5 1 2 3 4 5
5 1 2 3 4 5
5 1 2 3 4 5
5 10
4 1 2 3 4
5 1 2 5 6 7
5 2 6 7 8 9
4 6 7 8 9
2 9 10
5 5
1 1
1 2
1 3
2 4 5
1 5
stdout
NO
NO
NO
NO
NO
NO