D - People on a Line

Time Limit: 2 sec / Memory Limit: 256 MB

配点 : 400

問題文

x 軸上に N 人の人が立っています。 人 i の位置を x_i とします。 任意の i に対して、x_i0 以上 10^9 以下の整数です。 同じ位置に複数の人が立っていることもありえます。

これらの人の位置に関する情報が M 個与えられます。 このうち i 個めの情報は (L_i, R_i, D_i) という形をしています。 この情報は、人 R_i は人 L_i よりも距離 D_i だけ右にいること、 すなわち、x_{R_i} - x_{L_i} = D_i が成り立つことを表します。

これら M 個の情報のうちのいくつかに誤りがある可能性があることがわかりました。 与えられる M 個すべての情報と矛盾しないような値の組 (x_1, x_2, ..., x_N) が存在するかどうか判定してください。

制約

  • 1 \leq N \leq 100,000
  • 0 \leq M \leq 200,000
  • 1 \leq L_i, R_i \leq N (1 \leq i \leq M)
  • 0 \leq D_i \leq 10,000 (1 \leq i \leq M)
  • L_i \neq R_i (1 \leq i \leq M)
  • i \neq j のとき、(L_i, R_i) \neq (L_j, R_j) かつ (L_i, R_i) \neq (R_j, L_j)
  • D_i は整数である

入力

入力は以下の形式で標準入力から与えられる。

N M
L_1 R_1 D_1
L_2 R_2 D_2
:
L_M R_M D_M

出力

与えられるすべての情報と矛盾しない値の組 (x_1, x_2, ..., x_N) が存在するときは Yes と、存在しないときは No と出力せよ。


入力例 1

3 3
1 2 1
2 3 1
1 3 2

出力例 1

Yes

値の組 (x_1, x_2, x_3) として、(0, 1, 2)(101, 102, 103) などが考えられます。


入力例 2

3 3
1 2 1
2 3 1
1 3 5

出力例 2

No

はじめの 2 つの情報が正しいとすると、x_3 - x_1 = 2 が成り立つことが分かります。 これは最後の情報に矛盾します。


入力例 3

4 3
2 1 1
2 3 5
3 4 2

出力例 3

Yes

入力例 4

10 3
8 7 100
7 9 100
9 8 100

出力例 4

No

入力例 5

100 0

出力例 5

Yes

Score : 400 points

Problem Statement

There are N people standing on the x-axis. Let the coordinate of Person i be x_i. For every i, x_i is an integer between 0 and 10^9 (inclusive). It is possible that more than one person is standing at the same coordinate.

You will given M pieces of information regarding the positions of these people. The i-th piece of information has the form (L_i, R_i, D_i). This means that Person R_i is to the right of Person L_i by D_i units of distance, that is, x_{R_i} - x_{L_i} = D_i holds.

It turns out that some of these M pieces of information may be incorrect. Determine if there exists a set of values (x_1, x_2, ..., x_N) that is consistent with the given pieces of information.

Constraints

  • 1 \leq N \leq 100 000
  • 0 \leq M \leq 200 000
  • 1 \leq L_i, R_i \leq N (1 \leq i \leq M)
  • 0 \leq D_i \leq 10 000 (1 \leq i \leq M)
  • L_i \neq R_i (1 \leq i \leq M)
  • If i \neq j, then (L_i, R_i) \neq (L_j, R_j) and (L_i, R_i) \neq (R_j, L_j).
  • D_i are integers.

Input

Input is given from Standard Input in the following format:

N M
L_1 R_1 D_1
L_2 R_2 D_2
:
L_M R_M D_M

Output

If there exists a set of values (x_1, x_2, ..., x_N) that is consistent with all given pieces of information, print Yes; if it does not exist, print No.


Sample Input 1

3 3
1 2 1
2 3 1
1 3 2

Sample Output 1

Yes

Some possible sets of values (x_1, x_2, x_3) are (0, 1, 2) and (101, 102, 103).


Sample Input 2

3 3
1 2 1
2 3 1
1 3 5

Sample Output 2

No

If the first two pieces of information are correct, x_3 - x_1 = 2 holds, which is contradictory to the last piece of information.


Sample Input 3

4 3
2 1 1
2 3 5
3 4 2

Sample Output 3

Yes

Sample Input 4

10 3
8 7 100
7 9 100
9 8 100

Sample Output 4

No

Sample Input 5

100 0

Sample Output 5

Yes