题目描述
【题目描述】
农夫约翰,因其农场生产的牛奶质量远近闻名,正在为他的N个好朋友(1≤N≤50)举办一场牛奶品尝会。不幸的是,在聚会上出现的M种牛奶(1≤M≤50)中,只有一种坏掉了,但农夫约翰不知道是哪一种!任何喝了变质牛奶的人以后都会生病,无论是在聚会剩下的时间里还是之后。
你会得到一份聚会的记录——谁什么时候喝什么,谁什么时候生病。根据这些信息,你可以推断出哪些牛奶可能是坏牛奶。利用这些知识,帮助农民约翰确定他需要获得的药物的最小剂量,以保证他可以治愈所有生病的人,无论是在聚会中还是在聚会后。
【输入格式】(badmilk.in):
输入的第一行包含整数N、M、D和S。
接下来的D行(1≤D≤1000)分别包含三个整数p、m、t,表示人p在时间t时喝了牛奶m。p的取值范围是1…N, m的取值范围是1…m,t的取值范围是1…100。一个人可以多次喝同一种牛奶,也可以在同一时间点喝几种类型的牛奶。
接下来的S行(1≤S≤N)每一行包含两个整数p,t,表示人p在时间t生病。p的值在1…N的范围内,t的值在1…100的范围内。每个人最多会生病一次,他们只会生病,因为他们在某个严格意义上的较早时间点喝了坏牛奶。
【输出格式】(badmilk.out):
一个整数,指定农民约翰需要获得的药物的最小剂量,这样他就可以保证他有足够多的剂量来治疗所有生病的人,无论是在聚会期间还是在聚会之后。
【样例输入】
3 4 7 2
1 1 1
1 4 1
1 3 4
1 2 2
3 1 3
2 1 5
2 2 7
1 3
2 8
【样例输出】
3
【样例说明】
有3个人和4种牛奶类型。第1个人在时间3生病,第2个人在时间8生病。第三个人不会在聚会上生病,尽管我们可能仍然需要考虑他可能在聚会结束后生病的可能性。让我们逐一考虑牛奶的种类,看看哪些可能被污染;我们知道,如果每个生病的人在生病前都喝了某种类型的牛奶,那么这种牛奶可能是有害的。
牛奶1:两个生病的人(1和2)在生病前都喝了这种牛奶,所以这可能是坏牛奶。如果是这样,第三个人也喝了它,所以它会导致总共3个人生病(第三个人会在聚会后生病)。
牛奶2:两个生病的人在生病前都喝了这种牛奶,所以这也可能是坏牛奶。没有人喝这种牛奶,所以如果这是坏牛奶,最多两个人会生病。
牛奶3:这不可能是坏牛奶,因为第1人在生病之前没有喝它——第1人在时间4喝了它,在时间3生病了。如果3号牛奶与1号生病有关,那么1号最迟需要在时间2之前喝下这杯牛奶。
牛奶4:这不可能是坏牛奶,因为第二个人没有喝,但第二个人生病了。
因此,答案是农民约翰必须获得3剂药,因为如果1号牛奶是坏的,那么总共需要治愈3个人。
样例输入 复制
样例输出 复制