#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
int n, m;
int par[N];
int anc(int p) { return p == par[p] ? p : par[p] = anc(par[p]); }
void join(int p, int q) { par[anc(p)] = anc(q); }
int main() {
scanf("%d %d", &n, &m);
for (int i = 1; i <= n + m; ++i) par[i] = i;
for (int i = 1; i <= n; ++i) {
int k; scanf("%d", &k);
while(k--) {
int x; scanf("%d", &x); join(i, x + n);
}
}
int p = anc(1);
for (int i = 1; i <= n; ++i) if (anc(i) != p) {
cout << "NO\n"; return 0;
}
cout << "YES\n";
}
./Main.cpp: In function ‘int main()’:
./Main.cpp:13:24: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d %d", &n, &m);
^
./Main.cpp:17:25: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
int k; scanf("%d", &k);
^
./Main.cpp:19:26: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
int x; scanf("%d", &x); join(i, x + n);
^