10个样例MLE了9个QWQ
//版本一
#include<iostream>
#include<vector>
using namespace std;
int n,x,y,s,ans;
int fa[505][505];
int num[505];
bool dfs(int end,int now,bool flag)
{
if(end==now&&flag)return 0;
for(int i=1;i<=num[now];i++)
if(!dfs(end,fa[now][i],1))
return 0;
return 1;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>x>>y;
for(int j=1;j<=y;j++)
{
cin>>s;
fa[s][++num[s]]=x;
}
}
for(int i=1;i<=500;i++)
if(!dfs(i,i,0))
ans++;
if(ans)
cout<<ans;
else
cout<<"YES";
}
//版本二
#include<iostream>
#include<vector>
using namespace std;
int n,x,y,s,ans;
vector<int>fa[505];
bool dfs(int end,int now,bool flag)
{
if(end==now&&flag)return 0;
if(fa[now].empty())return 1;
for(auto f:fa[now])
{
if(!dfs(end,f,1))return 0;
}
return 1;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>x>>y;
for(int j=1;j<=y;j++)
{
cin>>s;
fa[s].push_back(x);
}
}
for(int i=1;i<=n;i++)
if(!dfs(i,i,0))
ans++;
if(ans)
cout<<ans;
else
cout<<"YES";
}