求大佬解题,c或c++皆可
宠物问题描述】fzk非常喜欢养宠物,比如他现在就养了2头奶牛,3只小熊,4个猩猩,5头大象,还有一个daizi。fzk 把他的宠物关在一些笼子里,例如,fzk当前的分配是: 笼子1: 奶牛,daizi ;笼子2: 奶牛;笼子3: 猩猩,大象;笼子4: 小熊,猩猩这样总共需要4个笼子。为了节省资金,fzk想用尽可能少的笼子来装下所有宠物。他的办法是在当前的分配下,合并一些笼子。假设每个笼子都足够大,可以装下任意多的宠物,而两个笼子如果装有相同的一种或多种宠物,就可以合并。现在给出fzk当前的分配,你能否帮助fzk算出按照他的方法合并后,总共只需要几个笼子? 比如对于上面的分配,可以合并为: 笼子1:奶牛,daizi ;笼子2:猩猩,小熊,大象总共需要2个笼子。
【要求】
【数据输入】首先一个整数t表示测试数据组数(1=<t<=10)。对每组数据,第一行是一个整数k(k>0),表示当前分配下总共的笼子数。在接下来的k行中,每行描述一个笼子中关的宠物。其中第i行的结构是:Ni name1 name2 name3 … nameNi。其中Ni(Ni>0)是该笼子中的宠物的种类数,name1,…,nameNi是这些宠物的
种类名称(他们互不相同)。所有的name都是由小写字母组成的字符串,长度不超过10位;所有的Ni之和不超过10000,不同的宠物种类数不超过1000。
【数据输出】对每组测试数据,输出一个整数,表示笼子合并之后fzk可以使用的最少的笼子数。
【样例输入】
1
4
2 nainiu daizi
1 nainiu
2 xingxing daxiang
2 xiaoxiong xingxing
【样例输出】
2