#B0008. 诚实者

诚实者

题目描述

nn 个人,每个人的编号从 11nn。每个人分为两类:

  • 诚实者:一定说真话
  • 不诚实者:说的话真假不定。可能真也可能假。

ii 个人做了 aia_i 条证言。第 ii 个人的第 jj 条证言由两个整数 xi,jx_{i,j}yi,jy_{i,j} 表示:

  • yi,j=1y_{i,j} = 1 时,表示 第 xi,jx_{i,j} 个人是诚实者
  • yi,j=0y_{i,j} = 0 时,表示 第 xi,jx_{i,j} 个人是不诚实的。

求在这 nn 个人中,最多可能有多少个诚实者?

输入格式

第一行输入 nn 代表人的个数。

接下来若干个行:

  • 首先输入一个数字 aia_i 代表第 ii 个人证言数量。
  • 接下来 aia_i 行,每行两个整数 xi,yix_i,y_i,表示第 ii 个人对于第 xix_i 个人的一个证言。
    • yi=0y_i=0,第 ii 个人认为第 xix_i 个人不诚实。反之是诚实的。

输出格式

输出可能存在的诚实者的最大人数。

3
1
2 1
1
1 1
1
2 0
2
3
2
2 1
3 0
2
3 1
1 0
2
1 1
2 0
0
2
1
2 0
1
1 0
1

提示

数据范围

对于所有的数据满足:

  • 1N151 \leq N \leq 15
  • 0AiN10 \leq A_i \leq N - 1

样例解释 1

  • 33 个人,编号分别为 1231、2、3
  • 11 个人有 11 条证言,内容是:“第 22 个人是诚实者”。
  • 22 个人有 11 条证言,内容是:“第 11 个人是诚实者”。
  • 33 个人有 11 条证言,内容是:“第 22 个人是不诚实者”。

分析

假设第 11 个人和第 22 个人都是诚实者:

  • 因为第 11 个人诚实,他说“第 22 个人是诚实者”是真的,所以第 22 个人确实诚实。
  • 因为第 22 个人诚实,他说“第 11 个人是诚实者”也是真的,所以第 11 个人确实诚实。
  • 33 个人的证言不影响,因为第 33 个人不诚实,他说“第 22 个人不诚实”是假的,符合设定。
  • 这样第 11 和第 22 个人是诚实者,第 33 个人是不诚实者。

因此 诚实者最大数量是 22

样例解释 2

  • 33 个人,编号 1231、2、3
  • 他们的证言相互矛盾,例如:
    • 11 号说 22 号诚实,33 号不诚实;
    • 22 号说 33 号诚实,11 号不诚实;
    • 33 号说 11 号诚实,22 号不诚实。

尝试假设任何一个人是诚实者都会导致矛盾,因为他们的证言互相否定。

结论: 无法找到符合所有证言的诚实者组合,最大诚实者人数为 00