PTIT013L - BÀI L- ĐIỂM THẮT GIAO THÔNG

Link Sub: http://www.spoj.com/PTIT/problems/PTIT013L/
Người Gửi: Dương Lee

  • Problem:

Cho hệ thống giao thông gồm N điểm. Biết giữa hai điểm bất kỳ của hệ thống đều tồn tại đường đi trực tiếp hoặc gián tiếp thông qua một số điểm trung gian. Ta gọi điểm giao thông s là điểm thắt của cặp nút giao thông u, v nếu mọi đường đi từ u đến v đều phải đi qua s. Ví dụ, với cặp nút 1, 3 của hệ thống giao thông gồm 5 điểm dưới đây sẽ có đỉnh thắt s = 2 và s = 4.  
Nhiệm vụ của bạn là viết một chương trình tìm số lượng các đỉnh thắt s của cặp điểm u, v của hệ thống giao thông.
Input
Dòng đầu tiên chứa số nguyên dương không lớn hơn 100 là số lượng các bộ dữ liệu. Các dòng tiếp theo chứa các bộ dữ liệu. Mỗi bộ dữ liệu gồm một nhóm dòng theo khuôn dạng:   
Dòng 1 chứa 4 số nguyên N,M,u,v (u,v,N ≤ 100; M ≤ 1000).   
M dòng  sau, mỗi dòng ghi hai  số  i,  j cách nhau một khoảng trống cho biết có đường nối trực tiếp giữa i với j (1≤i,j≤N).
Output
Với mỗi bộ dữ liệu, đưa ra màn hình một số nguyên là số lượng đỉnh thắt của cặp điểm u,v tương ứng.
Example:
Input
2
5 7 1 3
1 2
2 4
2 5
3 1
3 2
4 3
5 4
4 5 1 4
1 2
1 3
2 3
2 4
3 4
Output:
2
0

  • Solution:

- Sử dụng đệ quy quay lui check các điểm duyệt tới - Các bước làm: + Xây dựng các đường đi - read () (Sử dụng danh sách kề để tối ưu time). + Khởi tạo: mark[]=1 và check[]=0 - init() (mark[] là đại diện cho các điểm trùng, check[] là đại diện cho những điểm mà nó đi qua). + Đồ thị: Sử dụng đệ quy quay lui (theo cách DFS) để duyệt toàn bộ các trường hợp đi - DQ_QL(); (Mỗi lần tìm được đường từ u->v ta thu được arr: check[]) + Tìm điểm thắt nút: Điểm thắt nút là điểm có dạng mà tất cả các đường từ u->v đều phải qua điểm đó -> Vậy với mỗi arr: check[] thu được, ta sẽ đem so sánh nó với điểm duyệt trước nó là mark[] và lưu lại các điểm trùng. VD: cho 5 đỉnh: 1 2 3 4 5 có các đường đi từ 1->3 là: check[] 1 1 1 1 0 (1->2->4->3); check[] 1 1 1 1 1 (1->2->5->4->3); thu được mark[]: >mark[] 1 1 1 1 0 Vậy rõ ràng sau khi duyệt hết đường đi thì ngoài 1 và 3 có thêm 2 và 4 luôn được duyệt -> Có 2 điểm thắt => Số điểm thắt là số điểm luôn được duyệt ngoài 2 điểm u, v;

  • Code:

C++:



JAVA:


Share this

Related Posts

Previous
Next Post »