#CF1850H. 第三封信

第三封信

第三封信

时间限制:2s
空间限制:256MB

题目描述

为了赢得他最艰难的战斗,Mircea 为他的军队想出了一个绝妙的策略。他有 nn 名士兵,并决定将他们以某种方式安排在营地中。每个士兵必须恰好属于一个营地,每个整数点 xx 轴上(即 ⋯ ,−2,−1,0,1,2,⋯\cdots, -2, -1, 0, 1, 2, \cdots)都有一个营地。

该策略包含 mm 个条件。第 ii 个条件表示士兵 aia_i 应该被安排在比士兵 bib_i 所在营地前方 did_i 米的位置的营地中。(如果 di<0d_i < 0,则 aia_i 的营地应在 bib_i 的营地后方 −di-d_i 米的位置。)

现在,Mircea 想知道是否存在一种士兵的分配方式,能够满足所有条件。他请求你的帮助!如果存在一种分配方式使得 nn 名士兵的安排满足所有 mm 个条件,请输出 "YES";否则输出 "NO"。

注意,不同的士兵可以被安排在同一个营地。

输入格式

第一行包含一个整数 tt(1≤t≤1001 \leq t \leq 100),表示测试用例的数量。

每个测试用例的第一行包含两个正整数 nn 和 mm(2≤n≤2⋅1052 \leq n \leq 2 \cdot 10^5,1≤m≤n1 \leq m \leq n),分别表示士兵数量和条件数量。

接下来 mm 行,每行包含三个整数 aia_i、bib_i、did_i(ai≠bia_i \neq b_i,1≤ai,bi≤n1 \leq a_i, b_i \leq n,−109≤di≤109-10^9 \leq d_i \leq 10^9),表示如题意所述的条件。注意,如果 did_i 为正,则 aia_i 应在 bib_i 前方 did_i 米处;如果 did_i 为负,则 aia_i 应在 bib_i 后方 −di-d_i 米处。

注意,所有测试用例中 nn 的总和不超过 2⋅1052 \cdot 10^5。

输出格式

对于每个测试用例,如果存在一种士兵的安排方式满足所有条件,输出 "YES";否则输出 "NO"。

样例输入 1

4
5 3
1 2 2
2 3 4
4 2 -6
6 5
1 2 2
2 3 4
4 2 -6
5 4 4
3 5 100
2 2
1 2 5
1 2 4
4 1
1 2 3

样例输出 1

YES
NO
NO
YES

提示

对于第一个测试用例,我们可以将士兵分配到如下营地:

  • 士兵 11 在坐标 x=3x = 3 的营地。
  • 士兵 22 在坐标 x=5x = 5 的营地。
  • 士兵 33 在坐标 x=9x = 9 的营地。
  • 士兵 44 在坐标 x=11x = 11 的营地。

对于第二个测试用例,没有任何分配方式能同时满足所有约束。

对于第三个测试用例,没有任何分配方式能满足所有约束,因为关于同一对士兵的信息是矛盾的。

对于第四个测试用例,为了满足唯一的条件,一种可能的分配方式是:

  • 士兵 11 在坐标 x=10x = 10 的营地。
  • 士兵 22 在坐标 x=13x = 13 的营地。
  • 士兵 33 在坐标 x=−2023x = -2023 的营地。
  • 士兵 44 在坐标 x=−2023x = -2023 的营地。

数据范围

  • 对于所有数据,满足 1≤t≤1001\le t\le100。
  • 对于所有数据,满足 2≤n≤2000002\le n\le200000。
  • 对于所有数据,满足 1≤m≤n1\le m\le n。
  • 对于所有数据,满足 1≤ai,bi≤n1\le a_i,b_i\le n。
  • 对于所有数据,满足 ai≠bia_i\ne b_i。
  • 对于所有数据,满足 −109≤di≤109-10^9\le d_i\le10^9。
  • 所有测试组共同满足 ∑n≤200000\sum n\le200000。
子任务编号 分值 特殊限制
1 15 n≤7n\le7,∣di∣≤1\lvert d_i\rvert\le1,且一个输入文件内 ∑n≤42\sum n\le42
2 25 n≤250n\le250,且一个输入文件内 ∑n≤500\sum n\le500
3 30 每条条件都满足 ∣ai−bi∣=1\lvert a_i-b_i\rvert=1
4 无特殊限制