Trên thực tế có nhiều bài toán liên quan tới một tập các đối tượng và những mối liên hệ giữa chúng, đòi hỏi toán học phải đặt ra một mô hình biểu diễn một cách chặt chẽ và tổng quát bằng ngôn ngữ ký hiệu, đó là đồ thị. Những ý tưởng cơ bản của nó được đưa ra từ thế kỷ thứ XVIII bởi nhà toán học Thuỵ Sĩ Leonhard Euler, ông đã dùng mô hình đồ thị để giải bài toán về những cây cầu Konigsberg nổi tiếng.Mặc dù Lý thuyết đồ thị đã được khoa học phát triển từ rất lâu nhưng lại có nhiều ứng dụng hiện đại. Đặc biệt trong khoảng vài mươi năm trở lại đây, cùng với sự ra đời của máy tính điện tử và sự phát triển nhanh chóng của Tin học, Lý thuyết đồ thị càng được quan tâm đến nhiều hơn. Đặc biệt là các thuật toán trên đồ thị đã có nhiều ứng dụng trong nhiều lĩnh vực khác nhau như: Mạng máy tính, Lý thuyết mã, Tối ưu hoá, Kinh tế học v.v... Chẳng hạn như trả lời câu hỏi: Hai máy tính trong mạng có thể liên hệ được với nhau hay không?; hay vấn đề phân biệt hai hợp chất hoá học có cùng công thức phân tử nhưng lại khác nhau về công thức cấu tạo cũng được giải quyết nhờ mô hình đồ thị. Hiện nay, môn học này là một trong những kiến thức cơ sở của bộ môn khoa học máy tính.Lý thuyết đồ thị là một phần quan trọng trong nội dung chương trình chuyên của môn Tin học tại các trường chuyên. Hầu như trong các đề thi học sinh giỏi đều có các bài toán liên quan đến lý thuyết đồ thị, do đó để học sinh có được kết quả cao chúng ta cần trang bị cho các em một nền tảng tốt cũng như các kỹ thuật cài đặt các bài toán cơ bản của lý thuyết đồ thị.
Trang 1Trên thực tế có nhiều bài toán liên quan tới một tập các đối tượng và những mốiliên hệ giữa chúng, đòi hỏi toán học phải đặt ra một mô hình biểu diễn một cách chặtchẽ và tổng quát bằng ngôn ngữ ký hiệu, đó là đồ thị Những ý tưởng cơ bản của nóđược đưa ra từ thế kỷ thứ XVIII bởi nhà toán học Thuỵ Sĩ Leonhard Euler, ông đãdùng mô hình đồ thị để giải bài toán về những cây cầu Konigsberg nổi tiếng.
Mặc dù Lý thuyết đồ thị đã được khoa học phát triển từ rất lâu nhưng lại cónhiều ứng dụng hiện đại Đặc biệt trong khoảng vài mươi năm trở lại đây, cùng với sự
ra đời của máy tính điện tử và sự phát triển nhanh chóng của Tin học, Lý thuyết đồ thịcàng được quan tâm đến nhiều hơn Đặc biệt là các thuật toán trên đồ thị đã có nhiềuứng dụng trong nhiều lĩnh vực khác nhau như: Mạng máy tính, Lý thuyết mã, Tối ưuhoá, Kinh tế học v.v Chẳng hạn như trả lời câu hỏi: Hai máy tính trong mạng có thểliên hệ được với nhau hay không?; hay vấn đề phân biệt hai hợp chất hoá học có cùngcông thức phân tử nhưng lại khác nhau về công thức cấu tạo cũng được giải quyết nhờ
mô hình đồ thị Hiện nay, môn học này là một trong những kiến thức cơ sở của bộ mônkhoa học máy tính
Lý thuyết đồ thị là một phần quan trọng trong nội dung chương trình chuyên củamôn Tin học tại các trường chuyên Hầu như trong các đề thi học sinh giỏi đều có cácbài toán liên quan đến lý thuyết đồ thị, do đó để học sinh có được kết quả cao chúng tacần trang bị cho các em một nền tảng tốt cũng như các kỹ thuật cài đặt các bài toán cơbản của lý thuyết đồ thị
Tuy nhiên, lý thuyết đồ thị là một môn học cần tốn nhiều thời gian để truyền đạt,
có một số vấn đề thì cần thiết cho học sinh trong các kỳ thi, một số khác không cầnthiết, đặc biệt là một số vấn đề cần chứng mình, các định lý Mặt khác một số vấn đềlại phải được trang bị sâu nhằm giúp học sinh giải quyết tốt vấn đề trong các đề thi lạikhông có trong nhiều tài liệu lý thuyết đồ thị cổ điển Những vấn đề đó thường liênquan đến ứng dụng của lý thuyết đồ thị để giải quyết các bài toán thực tế.Một vấn đềkhó khăn mà giáo viên gặp phải là quỹ thời gian của chúng ta rất ít mà nội dung giảngdạy nhiều Do đó vấn đề chọn lựa những chuyên đề nào dạy và dạy đến đâu, nhữngvấn đề nào định hướng cho học sinh tự học cần phải đặt ra cho Giáo viên giảng dạy cáclớp chuyên Tin học và các đội tuyển chuẩn bị cho các kỳ thi Học sinh giỏi
Trong phạm vi một chuyên đề, không thể nói kỹ và nói hết những vấn đề của lýthuyết đồ thị mà chỉ giới thiệu các bài toán cơ bản của Lý thuyết đồ thị trong Tin họccùng với phương pháp truyền đạt cho học sinh Tập bài giảng này sẽ xem xét lý thuyết
đồ thị dưới góc độ người lập trình, tức là khảo sát những thuật toán cơ bản nhất có thể
dễ dàng cài đặt trên máy tính một số ứng dụng của nó Các khái niệm trừu tượng vàcác phép chứng minh sẽ được diễn giải một cách hình thức cho đơn giản và dễ hiểuchứ không phải là những chứng minh chặt chẽ dành cho người làm toán Ngoài ra cũngcung cấp một số bài tập trên mạng đã được phân loại thành các dạng giúp giáo viên cónguồn bài tập cung cấp cho học sinh sau khi giảng dạy các chuyên đề Lời giải của cácbài tập được cung cấp dưới dạng chương trình
Trang 2Nội dung chuyên đề lý thuyết đồ thị
Mục đích
Trang bị cho học sinh các kiến thức cơ bản cần thiết về đồ thị để giải quyết các bàitoán thi học sinh giỏi
1 Các khái niệm cơ bản
2 Các phương pháp tìm kiếm trên đồ thị
3 Chu trình Ơle và Hammilton
Trang 72 VOI06 Quân tượng
Trang 8Mã bài: QBBISHOP
Xét bàn cờ vuông kích thước n×n Các dòng được đánh số từ 1 đến n, từ dưới lên trên Cáccột được đánh số từ 1 đến n từ trái qua phải
Ô nằm trên giao của dòng i và cột j được gọi là ô (i,j) Trên bàn cờ có m (0 ≤ m ≤ n) quân
cờ Với m > 0, quân cờ thứ i ở ô (ri, ci), i = 1,2, , m Không có hai quân cờ nào ở trêncùng một ô Trong số các ô còn lại của bàn cờ, tại ô (p, q) có một quân tượng Mỗi mộtnước đi, từ vị trí đang đứng quân tượng chỉ có thể di chuyển đến được những ô trên cùngđường chéo với nó mà trên đường đi không phải qua các ô đã có quân
Cần phải đưa quân tượng từ ô xuất phát (p, q) về ô đích (s,t) Giả thiết là ở ô đích không cóquân cờ Nếu ngoài quân tượng không có quân nào khác trên bàn cờ thì chỉ có 2 trườnghợp: hoặc là không thể tới được ô đích, hoặc là tới được sau không quá 2 nước đi (hìnhtrái) Khi trên bàn cờ còn có các quân cờ khác, vấn đề sẽ không còn đơn giản như vậy
Yêu cầu: Cho kích thước bàn cờ n, số quân cờ hiện có trên bàn cờ m và vị trí của chúng, ô
xuất phát và ô đích của quân tượng Hãy xác định số nước đi ít nhất cần thực hiện để đưaquân tượng về ô đích hoặc đưa ra số -1 nếu điều này không thể thực hiện được
Input
Dòng đầu tiên chứa 6 số nguyên n, m, p, q, s, t
Nếu m > 0 thì mỗi dòng thứ i trong m dòng tiếp theo chứa một cặp số nguyên ri , ci xácđịnh vị trí quân thứ i
Hai số liên tiếp trên cùng một dòng được ghi cách nhau ít nhất một dấu cách
Trang 9Bessie rất yêu bãi cỏ của mình và thích thú chạy về chuồng bò vào giờ vắt sữa buổi tối.
Bessie đã chia đồng cỏ của mình là 1 vùng hình chữ nhật thành các ô vuông nhỏ với R (1
<= R <= 100) hàng và C (1 <= C <= 100) cột, đồng thời đánh dấu chỗ nào là cỏ và chỗ nào
là đá Bessie đứng ở vị trí R_b,C_b và muốn ăn cỏ theo cách của mình, từng ô vuông một
và trở về chuồng ở ô 1,1 ; bên cạnh đó đường đi này phải là ngắn nhất
Bessie có thể đi từ 1 ô vuông sang 4 ô vuông khác kề cạnh
Dưới đây là một bản đồ ví dụ [với đá ('*'), cỏ ('.'), chuồng bò ('B'), và Bessie ('C') ở hàng 5,cột 6] và một bản đồ cho biết hành trình tối ưu của Bessie, đường đi được dánh dấu bằngchữ ‘m’
Bản đồ Đường đi tối ưu
Bessie ăn được 9 ô cỏ
Cho bản đồ, hãy tính xem có bao nhiêu ô cỏ mà Bessie sẽ ăn được trên con đường ngắnnhất trở về chuồng (tất nhiên trong chuồng không có cỏ đâu nên đừng có tính nhé)
Dữ liệu
Dòng 1: 2 số nguyên cách nhau bởi dấu cách: R và C
Dòng 2 R+1: Dòng i+1 mô tả dòng i với C ký tự (và không có dấu cách) như đã nói
Trang 10VMUNCH.INP VMUNCH.OUT
5 6B *
C (1 <= C <= 100) cột Bessie ước gì có thể đếm được số khóm cỏ trên cánh đồng
Mỗi khóm cỏ trên bản đồ được đánh dấu bằng một ký tự ‘#‘ hoặc là 2 ký tự ‘#’ nằm kềnhau (trên đường chéo thì không phải) Cho bản đồ của cánh đồng, hãy nói cho Bessie biết
có bao nhiêu khóm cỏ trên cánh đồng
Ví dụ như cánh đồng dưới dây với R=5 và C=6:
Dòng 1: 2 số nguyên cách nhau bởi dấu cách: R và C
Dòng 2 R+1: Dòng i+1 mô tả hàng i của cánh đồng với C ký tự, các ký tự là ‘#’hoặc ‘.’
Kết quả
Dòng 1: Một số nguyên cho biết số lượng khóm cỏ trên cánh đồng
Ví dụ
VBGRASS.INP VBGRASS.OUT
Trang 115 6.#
Cho hai từ x, y và một dãy hữu hạn các từ (w1, w2, , wk)
Phép toán p * q mang ý nghĩa là phép nối từ p với từ q, hay nói cách khác p * q là một từmới tạo thành bằng cách viết từ q phía sau từ p Ta cần kiểm tra xem hai từ x, y có thể
tương đương hóa bằng cách sử dụng các từ trong dãy cho trước không.
Ví dụ: Từ abba và ab có thể tương đương hóa bằng cách sử dụng các từ trong dãy: baaabad
aa badccaa cc Ta cần nối vào từ abba các từ: aa và badccaa, và nối vào từ ab các từbaaabad, cc và aa theo thứ tự Trong cả hai trường hợp, ta sẽ thu được cùng một từ:abbaaabadccaa
Yêu cầu
Cho biết từ x, từ y và dãy từ w1, w2, , wk Cho biết từ x và y có thể tương đương hóa bằngcách sử dụng các từ trong dãy cho trước được hay không? Nếu có thể, hãy tìm số lượngnhỏ nhất phép toán * cần sử dụng
Dữ liệu
Dòng đầu tiên chứa một số nguyên dương k ≤ 40
Dòng thứ hai và dòng thứ ba mô tả từ x và y
K dòng tiếp theo mô tả dãy từ w1, w2, , wk, mỗi từ trên một dòng
Mô tả của mỗi từ chứa một số nguyên cho biết độ dài của từ, theo sau bởi khoảngtrắng và một chuỗi thể hiện từ đó
Mỗi từ chỉ bao gồm các chữ cái Latin in thường và có độ dài không vượt quá 2000
Tổng độ dài các từ không vượt quá 5000
Kết quả
Nếu không tồn tại lời giải, in ra 'NIE'
Nếu tồn tại lời giải, in ra một số nguyên dương, là số lượng nhỏ nhất các phép toán
* cần để tương đương hóa hai từ x và y
Ví dụ
Trang 12số phím khác tắt(nếu nó đang bật), các phím khác không đổi
Một phím dù đang bật hay tắt khi ta ấn nó thì phím này sẽ bật Các phím bị nó tác động sẽtắt nếu đang bật
Bạn được cho biết kết quả bấm của mỗi phím và 1 hiện trạng của các phím Hãy tìm 1 dãybấm liên tiếp 1 số ít nhất phím sao cho cuối cùng chỉ còn lại phím K, 1 <= K <= N, là bậtcác phím còn lại đều tắt
Trang 13- Gồm 1 số nguyên duy nhất là số lần bấm phím ít nhất Nếu ko có đáp án ghi ra -1
0 1 0 1
2
Trang 14Trong thành phố có m con đường, n đại lý bán kẹo (đánh số từ 1 đến n) Mỗi con đườngchỉ nối trực tiếp giữa 2 đại lý, và được ký hiệu bằng chỉ số của 2 đại lý mà nó nối Đồngthời, giữa 2 đại lý bất kỳ có không quá 1 con đường nối chúng
Ông Fruit-Jelly nghĩ rằng, ông ta sẽ quản lý nhân viên dễ hơn nếu xếp mỗi người tiếp thịtrên những hành trình có tính chất thứ tự Tức là những đại lý bán kẹo trên hành trình đóthỏa các điều kiện sau
Có đường nối trực tiếp giữa 2 đại lý liên tiếp nhau trên hành trình
Từ một đại lý bất kỳ trong hành trình có thể đi qua tất cả các đoạn đường trong hành trình
đó rồi trở về nơi xuất phát mà không đi qua đoạn đường nào quá một lần
Hành trình phân công cho mỗi nhân viên phải có ít nhất một đoạn đường chưa có nhânviên nào khác đi tiếp thị
Mỗi nhân viên chỉ di chuyển trên hành trình mà anh ta được phân công Hãy tính số lượngnhân viên tối đa mà ông Fruit-Jelly có thể xếp việc, và hành trình cụ thể mà mỗi ngườiđược xếp
Trang 15đã có thể gửi tin tới u).
Thầy chủ nhiệm đang có một thông tin rất quan trọng cần thông báo tới tất cả các học sinh
Để tiết kiệm thời gian, thầy chỉ nhắn tin tới 1 số học sinh rồi sau đó nhờ các học sinh nàynhắn lại cho tất cả các bạn mà các học sinh đó có thể liên lạc được, và cứ lần lượt như thếlàm sao cho tất cả các học sinh trong lớp đều nhận được tin
Hãy tìm một số ít nhất các học sinh mà thầy chủ nhiệm cần nhắn
Input
- Dòng đầu là N, M (N <= 800, M là số lượng liên lạc 1 chiều)
- Một số dòng tiếp theo mỗi dòng gồm 2 số u , v cho biết học sinh u có thể gửi tin tới họcsinh v
Trang 16Bạn hãy giúp Nuga chọn ra một bộ ba cao thủ thoả mãn yêu cầu của ông.
Dữ liệu:
Dòng đầu tiên ghi n là số cao thủ trên giang hồ (3 ≤ n ≤ 1000)
Tiếp theo là n dòng, mỗi dòng có n số A[i,j] = 1 là người i thắng j Dữ liệu luôn đảm bảoA[i,j] + A[j,i] = 1 A[i,i] = 0 với mọi i
Kết quả:
Ghi ra ba số nguyên A, B và C là thứ tự của ba cao thủ thoả mãn A thắng B, B thắng C và
C thắng A Trong trường hợp có nhiều cách lựa chọn, bạn chỉ cần chỉ ra một cách; trongtrường hợp không có cách lựa chọn thoả mãn yêu cầu, ghi ra ba số -1
Ví dụ:
Trang 17Một tập S các máy tính được gọi là hệ thống an toàn nếu dù một máy tính bất kỳ bị tấncông (do sự tò mò của người dân :-(,cứ thích truy cập và hack những trang cấm :-( ) thìtrong số những máy tính còn lại,những máy tính thuộc tập S vẫn có thể truyền được dữliệu cho nhau Xác định số lượng lớn nhất có thể các máy tính của tập S
Trang 185 Vòng đua xe đạp
Mã bài: BIC
Một vòng đua xe đạp được tổ chức trên N thành phố, đánh số từ 1 đến N Có M đường nối(một chiều) giữa các thành phố Vòng đua bắt đầu từ thành phố 1 và kết thúc tại thành phố2
Trang 19lại giữa mọi cặp đỉnh là nhỏ nhất Tức là: đạt giá trị nhỏ nhất Trong đo TA B
là thời gian đi từ đảo A đến đảo B Bạn hãy giúp nhà Vua tính toán chọn ra K trong số N
-1 tuyến phà để thay thế bằng cầu
Input
Dòng thứ nhất ghi 4 số nguyên N, K, VP, VC trong đó VP là vận tốc nếu đi bằng phà
và VC là vận tốc nếu đi bằng cầu VP và VC có đơn vị là m/s
N – 1 dòng tiếp theo, mỗi dòng ghi 3 số U V L thể hiện giữa đảo U và đảo V đã cómột tuyến phà, và khoảng cách giữa U và V là L mét
Trang 20Chuyên đề: ĐƯỜNG ĐI NGẮN NHẤT
1 Bin Laden
Mã bài: BINLADEN
Trùm khủng bố Bin Laden trốn trong 1 căn hầm được đào sâu xuống mặt đất M tầng, mỗitầng có N phòng Các phòng được ngăn cách bằng các cửa rất khó phá Các phòng có cửaxuống phòng ngay phía dưới và 2 phòng ở 2 bên Từ trên mặt đất có N cửa xuống N phòngtầng -1 Bin Laden ở tầng dưới cùng (tầng -M) phòng thứ N (phòng ở bên phải nhất) Mỗicửa được làm bằng một kim loại khác nhau với độ dày khác nhau nên việc phá cửa cầnthời gian khác nhau
Bạn hãy tìm cách đi từ mặt đất xuống phòng của Bin Laden nhanh nhất không hắn thoátmất
Trang 21có tổng số là 7 Mỗi lần, con xúc xắc có thể lăn về phía trái, phải, trước, sau Mỗi lần tiếpxúc với mặt bàn, ta mất một chi phí bằng số ghi trên ô mà xúc xắc đang nằm trên nhân với
số trên mặt của xúc xắc đang tiếp xúc với mặt bàn
Hãy tìm cách lăn từ một ô đến một ô khác trên mặt bàn để đạt chi phí nhỏ nhất
Dữ liệu
Trang 22 Dòng đầu ghi 2 số M, N lần lượt là số dòng và số cột của lưới ô trên mặt bàn.
M dòng sau, mỗi dòng ghi N số nguyên không quá 100 là số ghi trên các ô lưới củamặt bàn Các dòng được liệt kê theo thứ tự từ xa đến gần, các số trên mỗi dòng liệt
kê từ trái sang phải
Dòng cuối ghi 2 cặp số lần lượt là tọa độ (dòng, cột) của ô bắt đầu và ô kết thúc
Nhiệm vụ của bạn là viết một chương trình để chọn ra một đường trong danh sách đề xuấttrên để xây dựng sao cho độ dài đường đi ngắn nhất giữa s và t là nhỏ nhất
đó qj là độ dài của đường hai chiều được đề xuất thứ j nối giữa hai nút uj và vj
Dữ liệu ra
Trang 23Với mỗi bộ dữ liệu, ghi ra trên một dòng độ dài nhỏ nhất có thể của đường đi ngắn nhấtgiữa hai nút trọng yếu sau khi xây dựng xong một đường hai chiều từ danh sách đề xuất.Trường hợp không có đường đi từ s đến t, ghi -1.
Dữ liệu
Dòng đầu tiên ghi t là số test Với mỗi test, dòng đầu ghi K (0 ≤ K ≤ 10000) Dòng 2 ghi
N, 2 ≤ N ≤ 100 Dòng 3 ghi R, 1 ≤ R ≤ 10000 là số đường nối Mỗi dòng trong N dòng saughi 4 số nguyên S, D, L, T mô tả một con đường nối giữa S và D với độ dài L ( 1 ≤ L ≤100) và chi phí T (0 ≤ T ≤ 100) Lưu ý có thể có nhiều con đường nối giữa hai thành phố
Trang 243 5 2 0
5 4 3 2044
Bessie biết rằng cô ấy có thể xác định được C (1 <= C <= 8000) con đường hai chiều(được đánh số 1 C) kết nối tất cả các cánh đồng trong toàn bộ nông trại Ứng với mỗi conđường P_i là thời gian đi T_i (1 <= T_i <= 892) và nối 2 cánh đồng a_i và b_i (1 <= a_i <=P; 1 <= b_i <= P)
Bessie muốn tìm cánh đồng tốt nhất để ngủ thỏa mãn bình quân thời gian để đi đến F cánhđồng yêu thích của cô ta là nhỏ nhất
Ví dụ, hãy xem xét một nông trang được trình bày như một bản đồ dưới đây , nơi * 'd làcách đồng được yêu thích.Các số trong ngoặc là thời gian tương ứng để di chuyển giữa 2cánh đồng
** BEST 11 13 10 1 0 3 9 36/6 = 6.00 12 16 13 4 3 0 12 48/6 = 8.00
Kết quả tối ưu là cánh đồng 10
Dữ liệu
Trang 25 Dòng 1: 3 số nguyên P,F,C
Dòng 2 F+1: Dòng i+2 chứa 1 số Nguyên F_i
Dòng F+2 C+F+1 : Mỗi dòng chứa 3 số Nguyên a_i, b_i, F_i mô tả 1 con đường 2chiều là thời gian di chuyển giữa chúng
Trang 266 Số phụ thuộc
Mã bài: SUMS
Cho tập số nguyên A gồm n phần tử, A={a1, a2, , an} Số k được gọi là phụ thuộc vào tập
A, nếu k được tạo thành bằng cách cộng các phần tử của tập A(mỗi phần tử có thể cộngnhiều lần)
Ví dụ cho A={2,5,7} Các số như 2, 4(2+2), 12(5+7 hoặc 2+2+2+2+2) được gọi là phụthuộc vào tập A Số 0 cũng gọi là phụ thuộc vào tập A
Yêu cầu:
Cho một dãy B, hãy kiểm tra xem bi có phải là số phụ thuộc vào tập A hay không
Dữ liệu:
Dòng đầu tiên chứa số nguyên n (1 ≤ n ≤ 5000)
N dòng tiếp theo chứa các phân tử của tập A, a1 < a2 < < an (1 ≤ ai ≤ 50000 )
TAKNIETAKTAKNIETAK
Trang 27nối bởi quá 1 tuyến đường Trong N thành phố này thì thành phố 1 và thành phố N là 2trung tâm kinh tế lớn nhất nước và hệ thống đường đảm bảo luôn có ít nhất một cách đi từthành phố 1 đến thành phố N.
Tuy nhiên,cả 2 trung tâm này đều có dấu hiệu quá tải về mật độ dân số Vì vậy, đức vuaPeaceful quyết định chọn ra thêm một thành phố nữa để đầu tư thành một trung tâm kinh tếthứ ba Thành phố này sẽ tạm ngưng mọi hoạt động thường nhật, cũng như mọi luồng lưuthông ra vào để tiến hành nâng cấp cơ sở hạ tầng Nhưng trong thời gian sửa chữa ấy, phảibảo đảm đường đi ngắn nhất từ thành phố 1 đến thành phố N không bị thay đổi, nếu khôngnền kinh tế quốc gia sẽ bị trì trệ
Vị trí và đường nối giữa N thành phố được mô tả như một đồ thị N đỉnh M cạnh Hãy giúpnhà vua đếm số lượng thành phố có thể chọn làm trung tâm kinh tế thứ ba sao cho thànhphố được chọn thỏa mãn các điều kiện ở trên
Input
Dòng đầu tiên ghi 2 số nguyên dương N và M là số thành phố và số tuyến đường
Dòng thứ i trong số M dòng tiếp theo ghi 3 số nguyên dương xi, yi và di với ý nghĩa tuyếnđường thứ i có độ dài di và nối giữa 2 thành phố xi, yi
Trang 28Mã bài: FLOYD
Cho đơn đồ thị vô hướng N đỉnh và M cạnh, trọng số các cạnh đều nguyên dương Có 2 loại câu hỏi :
0 u v : Cho biết đường đi ngắn nhất từ u tới v có độ dài là bao nhiêu
1 u v : Hãy chỉ ra 1 đường đi ngắn nhất từ u => v
Bài cơ bản này nhằm kiểm tra kỹ năng xây dựng các module chương trình con dành cho truy vết 1 cách hợp lý, sử dụng nhuần nhuyễn chương trình con, lời gọi hàm
Download test và solution tại đây
l là độ dài đoạn đường đó Biết rằng hai nút giao thông bất kì có không quá 1 đường hai
Cho hai nút giao thông s và f, hãy tìm hai đường đi nối giữa s với f sao cho hai trên haiđường không có cạnh nào được đi qua hai lần và tổng độ dài 2 đường đi là nhỏ nhất
Input
Trang 29- Dòng đầu ghi N, M (N ≤ 100)
- Dòng thứ 2 ghi hai số s, f
- M dòng tiếp theo, mỗi dòng mô tả một đường gồm ba số nguyên dương u, v, l
Output
- Dòng đầu ghi T là tổng độ dài nhỏ nhất tìm được hoặc -1 nếu không tìm được
- Nếu tìm được, hai dòng sau, mỗi dòng mô tả một đường đi gồm: số đầu là số nút trênđường đi này, tiếp theo là dãy các nút trên đường đi bắt đầu từ s, kết thúc tại f
Chú ý:Phạm vi tính toán trong vòng Longint.
Mỗi tuyến đường như vậy sẽ xuất phát từ một thành phố, qua một số thành phố (không điqua thành phố nào 2 lần) rồi quay về nơi xuất phát Nếu tính chi phí vận chuyển trung bìnhtrên từng tuyến đường thì chi phí chi ra cho đợt khuyến mãi này sẽ không nhỏ nên giámđốc cũng muốn các tuyến đường này thỏa điều kiện tổng độ dài đường đi chia cho tổng sốcon đường trong tuyến đường đó (gọi là chi phí của tuyết đường) là nhỏ nhất
Cho một mạng lưới vận chuyển hàng của công ty MCA hãy tìm ra tuyến đường thích hợpnhất (thỏa cả 2 điều kiện trên) cho đợt khuyến mãi Xuất ra chi phí của tuyến đường tìmđược
Input
Trang 30Dòng đầu tiên ghi hai số nguyên N và M là số thành phố và số con đường trong mạng lưới.( 1 ≤ N ≤ 100, 1 ≤ M ≤ 9000 )
M dòng tiếp theo, mỗi dòng ghi ba số nguyên a b c với ý nghĩa có đường đi một chiều từ ađến b với độ dài là c ( 1 ≤ c ≤ 223 )
u1, e1, u2, ,ui, ei, ui+1, , uk-1, ek-1, uk, ek, u1
Trong đó u1, u2, , uk là các máy tính khác nhau trong mạng, ei – kênh truyền tin từ máy ui
đến máy ui+1 (i = 1, 2, , k-1), ek là kênh truyền tin từ máy uk đến máy u1 Một kênh truyềntin trong mạng được gọi là kênh xung yếu nếu như bất cứ mạch vòng nào của mạng cũngđều chứa nó
Yêu cầu: Hãy xác định tất cả các kênh xung yếu của mạng đã cho.
Input
Dòng đầu tiên chứa 2 số nguyên dương n và m
Dòng thứ i trong số m dòng tiếp theo mô tả kênh nối thứ i bao gồm hai số nguyên dương
ui, vi cho biết kênh nối thứ i cho phép truyền tin từ máy ui đến máy vi
Các số trên cùng một dòng được ghi cách nhau bởi dấu cách
Output
Trang 31Dòng đầu tiên ghi số nguyên k là số lượng kênh xung yếu trong mạng đã cho Ghi k = -1nếu mạng không chứa kênh xung yếu.
Nếu k>0 thì mỗi dòng trong số k dòng tiếp theo ghi thông tin về một kênh xung yếu tìmđược theo qui cách mô tả giống như trong file dữ liệu vào Đồng thời các kênh được in ratheo thứ tự từ điển
Cho một đa đồ thị vô hướng N đỉnh, M cạnh, mỗi cạnh có 1 trọng số nguyên dương
Yêu cầu: Hãy chọn ra một số cạnh sao cho đồ thị tạo bởi N đỉnh và các cạnh được chọnnày đảm bảo liên thông giữa 3 đỉnh 1, 2, 3 và tổng trọng số của các cạnh được chọn là nhỏnhất Dữ liệu vào đảm bảo có phương án
Dòng đầu tiên gồm 2 số nguyên: N, M
M dòng tiếp theo: dòng thứ i gồm 3 số nguyên dương U V C tương ứng là cạnh nàynối liền đỉnh U với đỉnh V, trọng số là C
Trang 32Bạn được biết chi phí ước tính để xây dựng một số con đường và bạn hãy chọn một số conđường để xây dựng để theo đúng ý nhà vua biết rằng luôn tồn tại ít nhất một phương ánxây dựng đường sao cho 4 thành phố đặc biệt liên thông.
Input
Dòng đầu tiên ghi số nguyên dương N là số lượng các thành phố.( 1 ≤ N ≤ 100 )
Dòng thứ hai ghi 4 số nguyên là số hiệu của 4 thành phố đặc biệt
Trong một số dòng tiếp theo, mỗi dòng ghi 3 số nguyên u, v và c với ý nghĩa muốn xâydựng một con đường hai chiều nối trực tiếp giữa 2 thành phố u và v thì chi phí là c ( 1 ≤ c
Trang 334 3 3
3 2 2
Chuyên đề: CHU TRÌNH EULER
1 Thám hiểm mê cung
Một mê cung gồm có N phòng và M hành lang nối các phòng, giữa hai phòng bất kì có không quá một hành lang nối chúng
Một người muốn khám phá mê cung, anh ta sẽ xuất phát từ một phòng và đi dọc theo tất cảcác hành lang sao cho mỗi hành lang được đi qua đúng một lần, rồi lại trở về vị trí xuất phát Mỗi hành lang có một giá trị c cho biết khi đi qua nó thì năng lượng nhà thám hiểm
sẽ cộng thêm với c (c có thể âm hay dương) Nhà thám hiểm bắt đầu xuất phát với năng lượng bằng 0, anh ta sẽ chết nếu sau khi đi hết một hành lang nào đó mà mức năng lượng nhỏ hơn 0
Yêu cầu: Hãy giúp nhà thám hiểm tìm ra một hành trình an toàn thỏa mãn các yêu cầu đã
Trang 34điện, nếu làng i là làng thứ k phân biệt được thăm trên hành trình và k ≤ wi, làng i sẽ trả wi
– k euros cho bưu điện Nếu k > wi , bưu điện đồng ý trả k - wi euros cho ngôi làng Ngoài
ra, bưu điện còn trả bưu tá một euro khi đi qua mỗi con đường trên hành trình
Có n ngôi làng, được đánh số từ 1 đến n Bưu điện được đặt ở ngôi làng số một, do đóhành trình cần bắt đầu và kết thúc tại ngôi làng này Mỗi ngôi làng được đặt ở giao điểmcủa hai, bốn, hoặc tám con đường Có thể có nhiều đường nối giữa hai ngôi làng Conđường có thể là một vòng nối một ngôi làng với chính nó
Yêu cầu: Viết chương trình xác định một hành trình đi qua mỗi ngôi làng và mỗi conđường ít nhất một lần, sao cho tổng lợi nhuận của bưu điện là lớn nhất (hay tổng thiệt hại
là bé nhất)
Dữ liệu
Dòng đầu tiên chứa 2 số nguyên n, m, cách nhau bởi khoảng trắng; n (1 ≤ n ≤ 200),
là số ngôi làng và m là số con đường
Mỗi dòng trong số n dòng sau chứa một số nguyên dương Dòng thứ i+1 chứa số wi,
0 ≤ wi ≤ 1000, xác định chi phí được trả bởi làng i
Mỗi dòng trong số m dòng sau chứa hai số nguyên dương cách nhau bởi khoảngtrắng, mô tả một con đường nối hai ngôi làng
Kết qủa
Dòng đầu tiên chứa số nguyên dương k, độ dài của hành trình
Dòng thứ hai theo chứa k+1 số cho biết các ngôi làng được thăm theo thứ tự trênhành trình, cách nhau bởi khoảng trắng, trong đó v1=vk+1=1
Ví dụ
NKPOS.INP NKPOS.OUT
6 717410205
Trang 353 6
1 6
1 3