Thứ Tư, 23 tháng 3, 2016

MẠNG RÚT GỌN

Một hệ thống gồm N máy tính được nối thành một mạng có M kênh nối, mỗi kênh nối hai máy tính trong mạng, giữa hai máy tính có không quá một kênh nối. Các máy tính được đánh số từ 1 đến N, các kênh nối đánh số từ 1 đến M. Việc truyền tin trực tiếp có thể thực hiện được đối với hai máy có kênh nối. Các kênh nối trong mạng được chia thành ba loại 1, 2 và 3. Ta nói giữa hai máy a và b trong mạng  có đường truyền tin loại k (k=1 hoặc k=2) nếu tìm được dãy các máy (a=v1, v2,…,vp=b) thoả mãn điều kiện: giữa hai máy vivi+1 hoặc có kênh nối loại k hoặc có kênh nối loại 3 (i=1, 2,..., p-1).
Yêu cầu: Cần tìm cách loại bỏ khỏi mạng một số nhiều nhất kênh nối nhưng vẫn đảm bảo luôn tìm được cả đường truyền loại 1 lẫn đường truyền tin loại 2 giữa hai máy bất kỳ trong mạng.
Dữ liệu vào: từ tệp văn bản RUTGON.INP như sau:
+ Dòng đầu tiên chứa hai số N, M (N≤500); M≤10000).
+ Dòng thứ i trong M dòng tiếp theo chứa ba số nguyên dương u, v, s cho biết kênh thứ i nối hai máy uv thuộc loại s.
Dữ liệu ra: ghi vào tệp văn bản RUTGON.OUT gồm:
Dòng đầu tiên ghi số r là số kênh cần loại bỏ.
+ Nếu  r=-1 thì có nghĩa là trong mạng đã cho tồn tại hai máy không có đường truyền loại 1 hoặc loại 2.
+ Nếu r=0 có nghĩa là mạng có đường truyền thoả mãn nhưng số kênh loại bỏ bằng 0.
+ Nếu r>0 thì r dòng tiếp theo, mỗi dòng ghi chỉ số của một kênh cần loại bỏ.
Các số trên cùng một dòng của các tệp dữ liệu và tệp kết quả cách nhau ít nhất một dấu cách.
Ví dụ:
RUTGON.INP
RUTGON.OUT
5 7
1 2 3
2 3 3
3 4 2
5 3 2
5 4 1
5 2 2
1 5 1
2
6
7