编辑代码

#include <iostream>
using namespace std;

int n,a[20],x[20][20],y[20][20],ans = 0;
bool vis[20];

bool check()
{
    for(int i = 1;i <= n;i++)
    {
        if(vis[i])
        {
            for(int j = 1;j <= a[i];j++)
            {
                if(vis[x[i][j]] != y[i][j])
                    return 0;
            }
        }
    }

    return 1;
}

void dfs(int step = 1,int cnt = 0)
{
    if(step > n)
    {
        if(check())
        {
            ans = max(ans,cnt);
        }
        return;
    }

    vis[step] = 1;
    dfs(step + 1,cnt+1);

    vis[step] = 0;
    dfs(step + 1,cnt+1);
}

int main() {
    cin>>n;
    for(int i = 1;i <= n;i++)
    {
        cin>>a[i];
        for(int j = 1;j <= a[i];j++)
        {
            cin>>x[i][j]>>y[i][j];
        }
    }
    dfs();
    cout<<ans;
	return 0;
}