英文地址:here
本文仅作学习之用,题目的测试用例下载及答案的上传请到上面的英文地址,有不专业或者错误还请指正。
奶昔店
问题
你经营一家奶昔店,可以准备N种不同的口味,每一种口味又可以分成添加麦乳精(malted)和不添加麦乳精(unmalted)两种。因此,你一共可以做2N中不同口味的奶昔。
每一位顾客都有一些自己喜欢的奶昔,并且只要你能提供一种他们喜欢的口味就可以满足他们的要求。每位顾客喜欢的口味里面最多有一种是添加麦乳精的。
你要制作N桶奶昔,因此:
- 每一种口味的奶昔都会有且只有一桶,而且它要么是添加麦乳精的要么是不添加的
- 对每一位顾客,你都应该至少准备一桶他们喜欢的类型。
- 含麦乳精的桶数尽可能的最少。
找出有没有可能在这些约束条件下满足所有的顾客,如果满足,你需要制作那些口味的奶昔。
如果可以满足所有的顾客,那么将会只有一个答案的添加麦乳精的奶昔桶数是最少的。
输入
- 包含一个整数C的一行,表示在输入文件里的测试用例数
对于每一个测试用例,会有:
- 包含一个整数N的一行,奶昔口味数
- 包含一个整数M的一行,顾客数
- M行,每一行对应一个顾客,包含:
- 一个整数T >= 1,顾客喜欢的奶昔口味数,紧接着是:
- T个整数对"X Y",一个是表示顾客喜欢的口味,X取值从1到N(包含),另一个Y为0表示不添加麦乳精,为1表示添加麦乳精。注意:
- 对于每一位顾客没有一个整数对会出现1次以上
- 每一位顾客至少有一种喜欢的口味(T >= 1)
- 每一位顾客最多喜欢一种添加麦乳精的奶昔口味。(也就是说对于每一位顾客最多有一个整数对的Y = 1)
所有的这些数字都用空格分开。
输出
- C行,一行对应输入文件中出现的一个测试用例,每一行包含一个字符串"Case #X: ",X表示第几个测试用例,从1开始,紧跟着是:
- 字符串"IMPOSSIBLE",表示如果用户的需求不能被满足 或者
- N个用空格分开的整数,表示从1到N的每一种口味,如果是0表示对应的口味应该不添加麦乳精,如果是1表示应该添加麦乳精。
限制
小数据集和
C = 1001 <= N <= 10
1 <= M <= 100
大数据集和
C = 5
1 <= N <= 2000
1 <= M <= 2000
在一个测试用例中所有顾客的全部T值的和不会超过3000
例子
输入
2
5
3
1 1 1
2 1 0 2 0
1 5 0
1
2
1 1 0
1 1 1
输出
Case #1: 1 0 0 0 0
Case #2: IMPOSSIBLE
在第一个例子中,你必须把#1口味添加美乳精来满足第一位顾客。其他的所有口味必须是不添加麦乳精的。把#2口味不添加麦乳精满足第二位顾客的需求,把#5口味做成不添加麦乳精满足第五位顾客的需求。
在第二个例子中只有一种口味。一个顾客希望是添加麦乳精的但另一位不希望,所以你不能同时满足他们两个。