完美的牛栏
题号:NC22962
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 32 M,其他语言64 M
64bit IO Format: %lld

题目描述

农夫约翰上个星期刚刚建好了他的新牛棚,他使用了最新的挤奶技术。不幸的是,由于工程问题,每个牛栏都不一样。第一个星期,农夫约翰随便地让奶牛们进入牛栏,但是问题很快地显露出来:每头奶牛都只愿意在她们喜欢的那些牛栏中产奶。上周,农场主约翰一直在收集哪些奶牛愿意在哪些奶牛栏里产奶的数据。一个畜栏只能分配给一头牛,当然,一头牛只能分配给一个畜栏。

给出奶牛们的爱好的信息,计算最大分配方案。

输入描述:

第一行: 两个整数,N (0 <= N <= 200)和M (0 <= M <= 200)。N是农夫约翰的奶牛数量,M是新牛棚的牛栏数量。
第二行到第N+1行: 一共N行,每行对应一只奶牛。第一个数字(Si)是这头奶牛愿意在其中产奶的牛栏的数目(0 <= Si <= M)。后面的Si 个数表示这些牛栏的编号。牛栏的编号限定在区间(1..M)中,在同一行,一个牛栏不会被列出两次。

输出描述:

只有一行。输出一个整数,表示最多能分配到的牛栏的数量。
示例1

输入

复制
5 5
2 2 5
3 2 3 4
2 1 5
3 1 2 5
1 2 

输出

复制
4