canuc80k2425·26/50

Tam Giác Trong Mạng Lưới

Nộp bài trên LQDOJ

Bài 24 · Sqrt Decomposition

Cho một đồ thị vô hướng đơn. Một tam giác là một tập gồm ba đỉnh phân biệt sao cho giữa mọi cặp đỉnh đều có cạnh. Thứ tự ba đỉnh không tạo ra tam giác mới.

Hãy đếm mọi tập ba đỉnh tạo thành tam giác, mỗi tập đúng một lần.

Input

  • Dòng đầu chứa . Mỗi trong dòng tiếp theo chứa hai đầu mút của một cạnh.

Output

  • In một số nguyên duy nhất: số tam giác không có thứ tự của đồ thị.

Constraints

  • .
  • .
  • và .
  • Đồ thị không có cạnh trùng.

Scoring

  • Subtask ( điểm): .
  • Subtask ( điểm): không có ràng buộc bổ sung.

Example

Test 1

Input

5 6
1 2
2 3
1 3
3 4
4 5
3 5

Output

2

Giải thích: Các bộ ba và có đủ ba cạnh. Không bộ ba nào khác tạo thành tam giác.

Lời giải tóm tắt
  • Ý tưởng: Định hướng mỗi cạnh từ đỉnh có cặp (bậc, số hiệu) nhỏ hơn sang đỉnh lớn hơn. Với từng đỉnh , đánh dấu mọi đỉnh ở danh sách cạnh đi ra của , rồi xét các cạnh đi ra từ từng hàng xóm . Nếu cạnh kết thúc ở một đỉnh đã đánh dấu, ba đỉnh tạo thành một tam giác.
  • Chứng minh đúng: Thứ tự (bậc, số hiệu) là thứ tự toàn phần nên mỗi cạnh có đúng một hướng. Trong một tam giác, đỉnh nhỏ nhất theo thứ tự có hai cạnh đi ra, và giữa hai đỉnh còn lại có một cạnh đi từ đỉnh nhỏ hơn tới đỉnh lớn hơn. Thuật toán phát hiện đúng cấu hình này một lần và không thể phát hiện nó từ đỉnh khác.
  • Độ phức tạp: theo cận định hướng bậc; bộ nhớ .