代码如下:
#include <bits/stdc++.h>
#include<stdio.h>
#define maxn 1000
using namespace std;
vector<int >a[maxn+5];//图
int n; //顶点数
int color[maxn+5]; //顶点i的颜色
bool dfs(int n,int c){
color[n]=c; //把顶点染色
for(int i=0;i<a[n].size();i++){
//如果相邻的顶点同色,返回false
if(color[a[n][i]]==c)return false;
//如果相邻的顶点没被染色,则染成-c
if (color[a[n][i]]==0&&!dfs(a[n][i],-c))return false;
}
return true;
}
void solve()
{
for(int i=0;i<n;i++){
if(color[i]==0){
if(!dfs(i,1)){
printf("No\n");
return ;
}
}
}
printf("Yes\n");
}
int main()
{
int t,s;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&t);
for(int j=0;j<t;j++){
scanf("%d",&s);
a[i].push_back(s);
a[s].push_back(i);
}
}
solve();
return 0;
}