#U1516DB3. Contaminated Milk

Contaminated Milk

农民约翰以其农场生产的牛奶质量而闻名遐迩,他正在为他最好的 N 个朋友 (1≤N≤50) 举办一场牛奶品尝派对。不幸的是,派对上的M种牛奶(1≤M≤50)中,恰好有一种变质了,但Farmer John不知道是哪一种!任何喝了劣质牛奶的人以后都会生病,无论是在聚会的剩余时间里还是之后。

你会得到一份聚会的记录——谁在什么时候喝什么,谁在什么时候生病。根据这些信息,您可以推断出哪种牛奶可能是劣质的。利用这些知识,帮助 Farmer John 确定他需要获得的最少药物剂量,以确保他能够治愈所有生病的人,无论是在聚会期间还是聚会之后。

输入格式(文件 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):

一个整数,指定 Farmer John 需要获得的最小药物剂量,以便他可以保证他将有足够多的剂量来治疗所有生病的人,无论是在聚会期间还是聚会之后。

样例输入:

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 时间生病。第 3 人在聚会上没有生病,尽管我们可能仍需要考虑他在聚会结束后可能会生病的可能性。让我们一一考虑牛奶的种类,看看哪些是可能被污染的;我们知道,如果每个生病的人在生病之前都喝了这种牛奶,那么这种牛奶可能会不好。

牛奶 1:两个病人(1 和 2)在生病前都喝了这种牛奶,所以这可能是坏牛奶。如果是这样,人 3 也喝了,所以总共会导致 3 人生病(聚会后人 3 会生病)。

牛奶2:两个病人在生病前都喝了这种牛奶,所以这也可能是坏牛奶。没有其他人喝过这种牛奶​​,所以如果这是劣质牛奶,最坏的情况是总共 2 人可能会生病。

牛奶 3:这不可能是坏牛奶,因为人 1 在生病前没有喝它——人 1 在时间 4 喝了它,在时间 3 生病了。如果牛奶 3 与人 1 生病有牵连,人 1最迟要在时间 2 之前喝完这种牛奶。

牛奶 4:这不可能是坏牛奶,因为人 2 没有喝它,但人 2 生病了。

因此,答案是 Farmer John 必须获得 3 剂药物,因为如果牛奶 1 不好,那么总共需要治愈 3 人。