#include #include #include #include "atcoder/scc" #include "atcoder/internal_type_traits" using namespace std; using namespace atcoder; int main() { int n; cin >> n; vector> a(n); for (int i = 0; i < n; ++i) { int m; cin >> m; a[i].resize(m); for (int j = 0; j < m; ++j) { cin >> a[i][j]; a[i][j]--; // Usize1に相当する処理 } } scc_graph scc(n); for (int i = 0; i < n; ++i) { for (int j : a[i]) { scc.add_edge(i, j); } } auto groups = scc.scc(); vector labels(n); for (int i = 0; i < groups.size(); ++i) { for (int v : groups[i]) { labels[v] = i; } } int m = groups.size(); vector> g(m); for (int i = 0; i < n; ++i) { for (int j : a[i]) { if (labels[i] != labels[j]) { g[labels[i]].insert(labels[j]); } } } int crr = 0; while (g[crr].find(crr + 1) != g[crr].end()) { crr = *g[crr].find(crr + 1); } bool ans = (crr == m - 1); cout << (ans ? "Yes" : "No") << endl; return 0; }