#CF1850H. The Third Letter

    ID: 6862 传统题 1000ms 256MiB 尝试: 1 已通过: 1 难度: 10 上传者: 标签>深度优先搜索并查集图论贪心模拟CodeforcesCodeforces Round 886(Div4)Div4HCF1850H1700

The Third Letter

题目描述

为了赢得他最艰难的战斗,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"。

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

输入格式

第一行包含一个整数 tt1t1001 \leq t \leq 100),表示测试用例的数量。

每个测试用例的第一行包含两个正整数 nnmm2n21052 \leq n \leq 2 \cdot 10^51mn1 \leq m \leq n),分别表示士兵数量和条件数量。

接下来 mm 行,每行包含三个整数 aia_ibib_idid_iaibia_i \neq b_i1ai,bin1 \leq a_i, b_i \leq n109di109-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 的总和不超过 21052 \cdot 10^5

输出格式

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

样例

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
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 的营地。

由 ChatGPT 4.1 翻译

来源

Codeforces 1850H,英文题名 The Third Letter。