#include<iostream>
#include<vector>
#include<bitset>
using namespace std;
const int N=10000;
bitset<N>used;
vector<int>adj[N];
bool nocycle=true;
void dfs(int k){
used[k]=true;
for(auto x:adj[k]){
if(used[x])
{nocycle=false;return;}
dfs(x);
}//for(auto..
used[k]=false;
}
int main(){
int n;cin>>n;
for(int i=1;i<=n;++i){
int cnt;cin>>cnt;
while(cnt--){
int k;cin>>k;
adj[i].push_back(k);
}//while(cnt..
}//for(int..
for(int i=1;i<=n;++i){
used.reset();
dfs(i);
}//for(int...
cout<<(nocycle?1:0)<<endl;
return 0;
}
检查图中的环,用dfs遍历所有从k节点出发的路径看是否有环,这种方法缺点是对于稠密图很容易segment fault,所以找到环要赶紧结束