bồi dưỡng học sinh giỏi môn tin học thpt chuyên đề một số bài TOÁN về cây KHUNG NHỎ NHẤT

12 585 1
bồi dưỡng học sinh giỏi môn tin học thpt chuyên đề một số bài TOÁN về cây KHUNG NHỎ NHẤT

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

MỘT SỐ BÀI TOÁN VỀ CÂY KHUNG NHỎ NHẤT Bài toán khung nhỏ toán tối ưu thuộc phần lý thuyết đồ thị Như biết, có thuật toán để giải toán này, thuật toán Prim thuật toán Kruskal, Tài liệu Giáo khoa chuyên Tin (Quyển 2) trình bày kỹ thuật toán, hướng dẫn cách cài đặt cụ thể đánh giá độ phức tạp tính toán Trong viết này, xin đưa số tập áp dụng thuật toán Bài toán 1: Vòng đua F1- Mã bài: NKRACING Singapore tổ chức đua xe Công Thức vào năm 2008 Trước đua diễn ra, xuất số đua đêm trái luật Chính quyền muốn thiết kế hệ thống kiểm soát giao thông để bắt giữ tay đua phạm luật Hệ thống bao gồm số camera đặt tuyến đường khác Để đảm bảo tính hiệu cho hệ thống, cần có camera dọc theo vòng đua Hệ thống đường Singapore mô tả dãy nút giao thông đường nối hai chiều (xem hình vẽ) Một vòng đua bao gồm nút giao thông xuất phát, đường bao gồm tuyến đường cuối quay trở lại điểm xuất phát Trong vòng đua, tuyến đường qua lần, theo hướng Chi phí để đặt camera phụ thuộc vào tuyến đường chọn Các số nhỏ hình vẽ cho biết chi phí để đặt camera lên tuyến đường Các số lớn xác định nút giao thông Camera đặt tuyến đường nút giao thông Bạn cần chọn số tuyến đường cho chi phí lắp đặt thấp đồng thời đảm bảo có camera dọc theo vòng đua Viết chương trính tìm cách đặt camera theo dõi giao thông cho tổng chi phí lắp đặt thấp Dữ liệu • Dòng chứa số nguyên n, m ( ≤ n ≤ 10000, ≤ m ≤ 100000) số nút giao thông số đường nối Các nút giao thông đánh số từ đến n m dòng mô tả đường nối, dòng bao gồm số nguyên dương cho biết hai đầu mút tuyến đường chi phí lắp đặt camera Chi phí lắp đặt thuộc phạm vi [1, 1000] Kết In số nguyên tổng chi phí lắp đặt thất tìm Ví dụ Dữ liệu: 67 125 233 145 454 564 633 Kết • Thuật toán: Ban đầu ta giả sử đặt camera tuyến đường, cần tìm cách bỏ số camera với tổng chi phí giảm lớn Tập hợp tuyến đường bỏ không chứa chu trình chứa tạo vòng đua không giám sát, suy bỏ nhiều n-1 camera n-1 tuyến đường n-1 tuyến đường khung đồ thị Để giảm nhiều chi phí cần tìm khung lớn đồ thị để bỏ camera cạnh khung Chương trình: {$mode objfpc} const fi='nkracing.inp'; fo='nkracing.out'; max=10000; maxm=100000; vc=100000000; var f:text; n,m,kq:longint; x,y,c:array[0 maxm+1]of longint; {a,ts:array[0 maxm*2+1]of longint;} goc:array[0 max+1]of longint; chon:array[0 maxm+1]of longint; dd:array[0 max+1]of boolean; procedure doc; var i,j:longint; begin assign(f,fi); reset(f); readln(f,n,m); kq:=0; for i:=1 to m begin read(f,x[i],y[i],c[i]); kq:=kq+c[i]; end; close(f); end; procedure viet; var i,j:longint; begin assign(f,fo); rewrite(f); writeln(f,kq); close(f); end; function laygoc(u:longint):longint; begin while goc[u]-1 u:=goc[u]; laygoc:=u; end; procedure doi(var i,j:longint); var tg:longint; begin tg:=i; i:=j; j:=tg; end; procedure sort(d1,c1:longint); var i,j,gt:longint; begin if d1>=c1 then exit; i:=d1; j:=c1; gt:=c[(c1+d1)div 2]; repeat while c[i]>gt inc(i); while c[j]

Ngày đăng: 29/04/2017, 19:47

Từ khóa liên quan

Mục lục

  • Thuật toán:

  • Ban đầu ta giả sử đã đặt camera ở mọi tuyến đường, như vậy cần tìm cách bỏ đi một số các camera với tổng chi phí giảm được là lớn nhất.

  • Tập hợp các tuyến đường bỏ đi không được chứa chu trình vì nếu chứa sẽ tạo ra một vòng đua không được giám sát, suy ra chỉ có thể bỏ đi nhiều nhất là n-1 camera ở n-1 tuyến đường và n-1 tuyến đường đó là một cây khung của đồ thị.

  • Để giảm được nhiều chi phí nhất thì cần tìm cây khung lớn nhất của đồ thị để bỏ camera trên các cạnh của cây khung đó.

  • Thuật toán:

  • Đề bài là tìm ra cây khung có cạnh lớn nhất là nhỏ nhất và đưa ra cạnh lớn nhất đó, tuy nhiên tôi nghĩ rằng mọi cây khung nếu đã là nhỏ nhất thì cạnh lớn nhất của nó cũng là nhỏ nhất trong số các cạnh lớn nhất của các cây khung.

  • Vì vậy, tôi dùng thuật toán Kruskal tìm cây khung nhỏ nhất áp dụng cho bài toán này, cạnh cuối cùng được thêm vào là cạnh lớn nhất của cây khung.

  • Chương trình:

Tài liệu cùng người dùng

Tài liệu liên quan