SP3930 MPART - Group Partition
题目描述
Jamie 是一个非常受欢迎的女孩,她有很多朋友,因此手机里存储了很长的联系人列表。由于联系人列表太长,她经常需要花费大量时间来查找某个朋友的电话号码。
作为 Jamie 最好的朋友和编程天才的你,建议她将联系人列表进行分组,并尽量减小最大一组的成员数量,这样查找起来会更方便。Jamie 采纳了你的建议,并提供了她的整个联系人名单,包括朋友的名字、希望分成的组数,以及每个朋友可以归属的组。
你的任务是编写一个程序,将联系人名单合理地分组,让每个朋友只出现在一个组里,并且使得最大组的大小最小。
输入格式
最多会有 20 组测试数据。每组数据开始于一行包含两个整数 $N$ 和 $M$,其中 $N$ 表示联系人名单的长度,$M$ 是组的数量。
接下来的 $N$ 行中,每行包含一个朋友的名字及该朋友所属的可能组。假定 $N$ 不超过 1000,$M$ 不超过 500。名字由字母组成,长度不超过 15 个字符。所有名字互不相同。组标签是介于 $0$ 到 $M-1$ 之间的整数。
当所有测试数据结束时,会有一行 `0 0`,表示输入终止。
**示例输入**
```
3 2
John 0 1
Rose 1
Mary 1
5 4
ACM 1 2 3
ICPC 0 1
Asian 0 2 3
Regional 1 2
ShangHai 0 2
0 0
```
输出格式
对于每组测试数据,输出一个整数,表示最大联系人组的大小。
**示例输出**
```
2
2
```
**注意:可能有大量数据输入**
说明/提示
- $1 \leq N \leq 1000$
- $1 \leq M \leq 500$
**本翻译由 AI 自动生成**