canuc80k2338·39/50

Hệ Phương Trình Vị Trí

Nộp bài trên LQDOJ

Bài 23 · Disjoint Set Union

Có biến tọa độ nguyên , mỗi biến phải nằm trong đoạn từ đến .

Bạn được cho phương trình hiệu. Phương trình yêu cầu:

Hãy xác định có tồn tại một bộ tọa độ thỏa đồng thời tất cả phương trình hay không.

Input

  • Dòng đầu chứa và .
  • dòng tiếp theo chứa , biểu thị .

Output

  • In Yes nếu tồn tại tọa độ nguyên trong đoạn thỏa mọi phương trình; ngược lại in No.

Constraints

  • ; .
  • và .
  • .
  • Không có hai dòng dùng cùng một cặp không thứ tự {L_{i}, R_{i}}.
  • Tọa độ của nhiều phần tử được phép bằng nhau.

Scoring

  • Subtask ( số điểm): .
  • Subtask ( số điểm): Không có giới hạn bổ sung.

Example

Test 1

Input

5 5
1 2 4
2 3 7
3 4 3
4 5 2
1 5 15

Output

No

Giải thích: Bốn phương trình đầu suy ra , trái với phương trình cuối yêu cầu giá trị , nên hệ không thể thỏa đồng thời.

Lời giải tóm tắt
  • Phân tích: Đây là hệ phương trình hiệu. Weighted DSU lưu weight[x]=x[x]-x[parent[x]]; sau nén đường đi, ta biết hiệu giữa một nút và gốc. Một phương trình mới hoặc nối hai thành phần với độ lệch xác định, hoặc kiểm tra độ lệch đã bị cố định.
  • Thuật toán: Xử lý x[R]-x[L]=D. Sau find, nếu L,R cùng gốc, kiểm tra weight[R]-weight[L]=D. Nếu khác gốc, gắn một gốc dưới gốc kia và đặt trọng số gốc con để đẳng thức đúng. Gặp mâu thuẫn in No; nếu hết dữ liệu in Yes.
  • Chứng minh: Bất biến weighted DSU giữ đúng mọi hiệu do các phương trình đã xử lý suy ra. Hai thành phần khác nhau có thể tịnh tiến độc lập nên luôn nối được bằng một phương trình; công thức gắn gốc chọn đúng độ lệch. Trong cùng thành phần, hiệu đã duy nhất nên phép so sánh là điều kiện cần và đủ cho nhất quán. Mỗi đường đơn có không quá N-1 cạnh và mỗi độ lệch không quá 10000, nên độ trải của một thành phần nhất quán nhỏ hơn 10^9; ta luôn tịnh tiến nó vào [0,10^9].
  • Độ phức tạp: O((N+M) α(N)) thời gian, O(N) bộ nhớ.