bzoj#P2811. [APIO2012] Guard

[APIO2012] Guard

题目描述

APIO 王国正被忍者攻击!忍者非常厉害,因为他们在进攻的时候可以躲在 阴影里面使得其他人看不到他们。整个王国除了国王居住的 APIO 城堡以外都已 经被占领了。在城堡前,有 NN 个灌木丛,从 11NN 编号,有 KK 个忍者躲在恰好 KK 个灌木丛后面。APIO 城堡里有 MM 个守卫。守卫 ii 监视着编号从 AiA_iBiB_i 的连续的一段灌木丛。每个守卫都向国王报告在他所监视范围内是否有忍者出现。作为国王的仆人,你需要告诉国王,基于守卫的报告,哪些灌木丛后面一定躲着一个忍者,即对于任何和守卫报告不矛盾的忍者排列方式,在这个灌木丛后面都躲着一个忍者。

你需要写一个程序来输出所有的这些灌木丛的编号。

输入格式

第一行包含三个用空格分隔的整数 N,K,MN, K, MNN 是灌木丛的个数,KK 是忍者的个数,MM 是守卫的个数。

接下来 MM 行,每行描述一个守卫的信息。其中的第 ii 行包含三个整数 Ai,Bi,CiA_i, B_i, C_i,表示第 ii 个守卫的监视范围是从 AiA_iBiB_iAiBiA_i \leq B_i)。CiC_i00 或者 11,若是 00 表示范围内没有看到忍者,11 表示范围内有至少一个忍者。

输入数据保证至少存在一种忍者排列方式满足所有条件。

输出格式

若存在灌木丛,在其后面一定躲着忍者,则将这些一定躲着忍者的灌木丛按 照编号从小到大的顺序依次输出,每个一行。即若有 XX 个这样的灌木丛,则需要输出 XX 行。若不存在,则输出一行一个 -1,不包含引号。

5 3 4 
1 2 1 
3 4 1 
4 4 0 
4 5 1
3
5

样例 1 解释

在这个样例中,有两种可能的安排方式:1,3,51,3,5 或者 2,3,52,3,5。即 3355 后面必然躲着一个忍者。考虑第一个灌木丛,存在一种安排方案使得它的后面躲着忍者,但也存在一种安排方案使得它后面没有躲忍者,因此不应该输出 11。同理,不应该输出 22

5 1 1 
1 5 1
-1

样例 2 解释

在这个样例中,没有灌木丛后面一定躲着忍者。

数据范围

对于 10%10\% 的数据,N20N \leq 20M100M \leq 100

对于 50%50\% 的数据,N1000N \leq 1000M1000M \leq 1000

对于所有数据,保证灌木的数量 1N1051 \leq N \leq 10^5,忍者数 1KN1 \leq K \leq N,守卫数 0M<1050 \leq M < 10^5