P13458 [GCJ 2008 #1A] Milkshakes

题目描述

你经营着一家奶昔店。有 $N$ 种不同口味的奶昔,每种口味可以制作成“麦芽味”或“非麦芽味”。因此,你可以制作 $2N$ 种不同类型的奶昔。 你的每位顾客都有一组喜欢的奶昔类型,只要你准备了他们喜欢的任意一种类型,他们就会满意。每位顾客喜欢的类型中,最多只有一种是“麦芽味”。 你需要制作 $N$ 批奶昔,要求如下: - 每种口味的奶昔只制作一批,该批可以是麦芽味或非麦芽味。 - 对于每位顾客,你至少要制作出一种他们喜欢的奶昔类型。 - 使得麦芽味批次的数量尽可能少。 请判断在上述约束下,是否有可能让所有顾客都满意。如果可以,请给出每种口味应制作成麦芽味还是非麦芽味的方案。 如果存在满足条件的方案,且麦芽味批次数最少,则答案唯一。

输入格式

第一行包含一个整数 $C$,表示测试用例的数量。 对于每个测试用例,包含如下内容: - 一行包含整数 $N$,表示奶昔口味的数量。 - 一行包含整数 $M$,表示顾客的数量。 - 接下来的 $M$ 行,每行描述一位顾客,格式如下: - 一个整数 $T \geq 1$,表示该顾客喜欢的奶昔类型数量,后跟 - $T$ 对整数“X Y”,每对表示一种该顾客喜欢的类型,其中 $X$ 为口味编号($1$ 到 $N$),$Y$ 为 $0$ 表示非麦芽味,$1$ 表示麦芽味。 注意: - 对于同一位顾客,不会有重复的“X Y”对。 - 每位顾客至少喜欢一种口味($T \geq 1$)。 - 每位顾客喜欢的类型中,最多只有一种是麦芽味(即每位顾客最多只有一对 $Y = 1$)。 所有数字之间用单个空格分隔。

输出格式

共 $C$ 行,每行对应一个测试用例,格式为 "Case #$X$: ",其中 $X$ 为测试用例编号(从 $1$ 开始),后接: - 如果无法满足所有顾客的需求,输出字符串 "IMPOSSIBLE"; - 否则,输出 $N$ 个用空格分隔的整数,分别表示每种口味应制作成非麦芽味($0$)还是麦芽味($1$)。

说明/提示

**样例解释** 在第一个样例中,你必须将第 $1$ 号口味制作成麦芽味,以满足第一个顾客。其他口味都可以制作成非麦芽味。第二个顾客通过第 $2$ 号口味的非麦芽味得到满足,第三个顾客通过第 $5$ 号口味的非麦芽味得到满足。 在第二个样例中,只有一种口味。一位顾客想要麦芽味,另一位想要非麦芽味,无法同时满足两人。 **数据范围** **小数据集(10 分,测试点 1 - 可见)** - $C = 100$ - $1 \leq N \leq 10$ - $1 \leq M \leq 100$ **大数据集(25 分,测试点 2 - 隐藏)** - $C = 5$ - $1 \leq N \leq 2000$ - $1 \leq M \leq 2000$ 每个测试用例中,所有顾客的 $T$ 之和不超过 $3000$。 由 ChatGPT 4.1 翻译