7602: 拼尽全力

内存限制:128 MB 时间限制:2 S
题面:Markdown 评测方式:文本比较 上传者:
提交:2 通过:1

题目描述

小 x 收到 $n$ 家公司的面试邀请。因为机会难得,他希望通过每一次面试。 每次面试都会从 $m$ **个不同维度**考察小 x 的能力,这些维度分别用 $ c_1, c_2, \dots, c_m $ 表示。小 x 在这 m 个维度上的初始能力分别为 $ a_1, a_2, \dots, a_m $。如果小 x 在每个维度上的能力都**大于或等于**面试的要求,那么他就能通过这次面试。 通过面试后,小 x 的每维能力会获得提升相应的,提升量分别为 $ w_1, w_2, \dots, w_m $。具体来说,如果小 x 在第 $ j $ 维的能力通过面试后提升,那么他的能力会从 $ a_j $ 变为 $ a_j + w_j $。 小 x 的初始能力为 $a_1, a_2, \dots a_m$ 。问小 x 能否通过分配面试的次序通过每一场面试。可能输出 `YES`,否则输出 `NO`。 **简化题意**: 给定小 x 初始能力 。我们需要判断是否存在排列 $ \pi $,使得对于所有 $ i $ $ \left(1 \leq i \leq n\right) $,在第 $ \pi(i) $ 次面试时,小 x 的第 $ j $ $\left(1\leq j\leq m\right)$ 维能力 $ a_j $ 满足 $ a_j \geq c_{\pi(i), j} $。通过面试后,小 x 的第 $ j $ 维能力将提升为 $ a_j + w_{\pi(i), j} $。 --- 为了防止输入过大带来的常数问题,`C++` 选手请尽量使用关闭流同步的 `std::cin` 和 `std::cout` 实现输入输出,否则可能出现因读入输出问题导致的 TLE 等。 ```cpp int main(){ std::ios::sync_with_stdio(0); std::cin.tie(0); // your code return 0; } ```

输入格式

第一行一个整数 $ T $ $ \left(1 \leq T \leq 15 \right) $,表示测试数据组数。 对于每组数据: 第一行包含两个用空格分隔的正整数 $ n , m $ $ \left(n \times m \leq 10^6\right) $,分别表示公司的数量和能力维度的数量。 第二行包含 $ m $ 个用空格分隔的整数 $ a_1, a_2, \dots, a_m $ $ \left(0 \leq a_i \leq 10^9\right)$,表示小 x 的初始能力。 接下来 $ n $ 行,每行包含 $ 2m $ 个用空格分隔的整数 $c_{i,1}, c_{i,2}, \dots, c_{i,m}, w_{i,1}, w_{i,2}, \dots, w_{i,m} $ $ \left(0 \leq c_{i,j}, w_{i,j}\leq 10^9\right)$,分别表示第 $ i $ 家公司的能力要求和能力提升量。 保证所有测试数据的 $ n \times m $ 之和均不超过 $ 3 \times 10^6 $。

输出格式

对于每组数据,如果存在一种面试次序使得小 x 能够通过所有面试,输出 `YES`;否则输出 `NO`。

输入样例 复制

2
4 3
4 2 1 
1 2 1 4 1 2 
3 5 4 2 4 5 
7 3 1 2 2 3 
6 7 6 4 5 5 
1 1
5
9 4

输出样例 复制

YES
NO