1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Bài giảng môn lý thuyết đồ thị chương 4 bài toán cây khung nhỏ nhất

118 34 0

Đ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

Thông tin cơ bản

Tiêu đề Bài Giảng Môn Lý Thuyết Đồ Thị Chương 4 Bài Toán Cây Khung Nhỏ Nhất
Trường học Trường Đại Học Bách Khoa Hà Nội
Chuyên ngành Lý Thuyết Đồ Thị
Thể loại Bài giảng
Thành phố Hà Nội
Định dạng
Số trang 118
Dung lượng 2,1 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

 Tập các chu trình cơ bản là một tập nhiều nhất các chu trình thỏa mãn điều kiện: Mỗi chu trình có đúng một cạnh riêng, cạnh đó không nằm trong các chu trình còn lại và việc loại bỏ cạn

Trang 1

Chương 4 Bài toán cây khung nhỏ nhất

The Minimum Spanning Tree Problem

Trang 2

Nội dung

4.1 Cây và các tính chất cơ bản của cây

4.2 Cây khung của đồ thị

4.3 Xây dựng tập các chu trình cơ bản của đồ thị

4.4 Xây dựng cây theo chiều sâu và chiều rộng

4.5 Bài toán cây khung nhỏ nhất

Trang 3

Cây và rừng (Tree and Forest)

Định nghĩa 1 Ta gọi cây là đồ thị vô hướng liên

thông không có chu trình Đồ thị không có chu

trình được gọi là rừng.

Như vậy, rừng là đồ thị mà mỗi thành phần liên

thông của nó là một cây

Trang 4

VÍ DỤ

G1, G2 là cây

G3, G4 không là cây

Trang 5

Các tính chất cơ bản của cây

Định lý 1 Giả sử T=(V,E) là đồ thị vô hướng n đỉnh Khi

đó các mệnh đề sau đây là tương đương:

MĐ1: T là cây ( T liên thông và không chứa chu trình ).

MĐ2: T không chứa chu trình và có n-1 cạnh.

MĐ3: T liên thông và có n-1 cạnh.

MĐ4: T liên thông và mỗi cạnh của nó đều là cầu.

MĐ5: Hai đỉnh bất kỳcủa T được nối với nhau bởi đúng 1

đường đi đơn.

MĐ6: T không chứa chu trình nhưng hễcứthêm vào nó

một cạnh ta thu được đúng 1 chu trình.

Trang 6

Nội dung

4.1 Cây và các tính chất cơ bản của cây

4.2 Cây khung của đồ thị

4.3 Xây dựng tập các chu trình cơ bản của đồ thị

4.4 Xây dựng cây theo chiều sâu và chiều rộng

4.5 Bài toán cây khung nhỏ nhất

Trang 7

Cây khung của đồ thị

Định nghĩa 2 Giả sử G=(V,E) là đồ thị vô hướng liên

thông Cây T=(V,F) với FE được gọi là cây khung của

Trang 8

Số lượng cây khung của đồ thị

Định lý sau đây cho biết số lượng cây khung

Trang 9

HH

H

HH

Trang 10

Ví dụ:

Các cây khung của đồ thị:

abc, bcd, cda, dab,

afc, dfb, aec, deb,

aed, afb, bec, cfd,

efc, efd, efa, efb

Số cây khung là: 4 2 = 16

Trang 11

Nội dung

4.1 Cây và các tính chất cơ bản của cây

4.2 Cây khung của đồ thị

4.3 Xây dựng tập các chu trình cơ bản của đồ thị

4.4 Xây dựng cây theo chiều sâu và chiều rộng

4.5 Bài toán cây khung nhỏ nhất

Trang 12

Tập các chu trình cơ bản

hướng liên thông, H=(V,T) là cây khung của G

các chu trình cơ bản của đồ thị G

Trang 13

Tính chất:

Tập các chu trình cơ bản phụ thuộc vào cây

khung của đồ thị Hai cây khung khác nhau có

thể cho hai tập chu trình cơ sở khác nhau.

Nếu một đồ thị liên thông có n đỉnh, m cạnh Khi

đó cây khung có n-1 cạnh, còn lại m-n+1 cạnh

ngoài Tương ứng với mỗi cạnh ngoài, ta có một

chu trình cơ bản Vì vậy, số chu trình cơ bản của

một đồ thị liên thông là m-n+1.

Tập các chu trình cơ bản là một tập nhiều nhất

các chu trình thỏa mãn điều kiện: Mỗi chu trình

có đúng một cạnh riêng, cạnh đó không nằm

trong các chu trình còn lại và việc loại bỏ cạnh

này không ảnh hưởng đến tính liên thông của đồ

Trang 14

Tên gọi chu trình cơ bản gắn liền với sự kiện chỉ ra

trong định lý sau đây:

Định lý 3 Giả sử G=(V,E) là đồ thị vô hướng liên

thông, H=(V,T) là cây khung của nó Khi đó mọi chu trình của đồ thị G đều có thể biểu diễn như là hiệu đối xứng của một số các chu trình cơ bản.

Trang 15

Ý nghĩa ứng dụng

 Việc tìm tập các chu trình cơ bản giữ một vai trò

quan trọng trong vấn đề giải tích mạng điện:

 Theo mỗi chu trình cơ bản của đồ thị tương

ứng với mạng điện cần phân tích ta sẽ thiết lập

được một phương trình tuyến tính theo định

luật Kirchoff: Tổng hiệu điện thế dọc theo một

mạch vòng là bằng không.

 Hệ thống phương trình tuyến tính thu được cho

phép tính toán hiệu điện thế trên mọi đoạn

đường dây của lưới điện.

Trang 16

Thuật toán xây dựng tập chu trình cơ bản

Đầu vào: Đồ thị G=(V,E) được mô tả bằng danh sách kề Ke(v),

vV.

procedure Cycle(v);

(* Tập các chu trình cơ bản của thành phần liên thông chứa đỉnh

v Các biến d, num, STACK, Index là toàn cục *)

if (u STACK[d-1]) and (Index[v] > Index[u]) then

< Ghi nhận chu trình với các đỉnh:

STACK[d], STACK[d-1], , STACK[c], với STACK[c]=u

>;

Trang 17

Thuật toán xây dựng tập chu trình cơ bản

Trang 18

Ví dụ:

Trang 19

Tập các chu trình cơ bản:

Trang 20

Nội dung

4.1 Cây và các tính chất cơ bản của cây

4.2 Cây khung của đồ thị

4.3 Xây dựng tập các chu trình cơ bản của đồ thị

4.4 Xây dựng cây theo chiều sâu và chiều rộng

4.5 Bài toán cây khung nhỏ nhất

Trang 21

Xây dựng cây khung

Xây dựng theo chiều sâu

Xây dựng theo chiều rộng

Trang 22

Xây dựng theo chiều sâu

/* Khai báo các biến toàn cục ChuaXet, Ke, T */

Trang 23

Xây dựng theo chiều sâu

Trang 24

Ví dụ: Xây dựng cây theo chiều sâu

Trang 25

Xây dựng cây theo chiều rộng

/* Khai báo các biến toàn cục ChuaXet, Ke, QUEUE */

Trang 26

Xây dựng cây theo chiều rộng

main() /* Nhập đồthị, tạo biến Ke */{

Trang 27

Ví dụ: Xây dựng cây theo chiều rộng

1->2->3->4->6->5->7->8->10->9

Cây khung của G là:

Trang 28

Nội dung

4.1 Cây và các tính chất cơ bản của cây

4.2 Cây khung của đồ thị

4.3 Xây dựng tập các chu trình cơ bản của đồ thị

4.4 Bài toán cây khung nhỏ nhất

Trang 29

BÀI TOÁN CÂY KHUNG NHỎ NHẤT

Minimum Spanning Tree (MST)

Trang 30

Bài toán CKNN

Bài toán: Cho đồ thị vô hướng liên thông G=(V,E) với trọng số

c(e), eE Độ dài của cây khung là tổng trọng số trên các cạnh

của nó Cần tìm cây khung có độ dài nhỏ nhất

1

f

d a

5

2

Độ dài của cây khung là Tổng độ dài các cạnh: 14

Trang 31

Bài toán cây khung nhỏ nhất

 Có thể phát biểu dưới dạng bài toán tối ưu tổ hợp:

Tìm cực tiểu

c(H) = c(e)  min,

eT

với điều kiện H=(V,T) là cây khung của G.

Do số lượng cây khung của G là rất lớn (xem định lý

Cayley), nên không thể giải nhờ duyệt toàn bộ

Trang 32

Ứng dụng thực tế: Mạng truyền thông

 Công ty truyền thông AT&T cần xây dựng mạng

truyền thông kết nối n khách hàng Chi phí thực hiện kênh nối i và j là cij Hỏi chi phí nhỏ nhất để thực hiện việc kết nối tất cả các khách hàng là bao nhiêu?

Trang 33

Bài toán xây dựng hệ thống đựờng sắt

phố sao cho hành khách có thể đi lại giữa hai thành phố bất kỳđồng thời tổng chi phí xây dựng phải là nhỏ nhất

tuyến đường sắt nối các thành phố tương ứng với phương ánxây dựng tối ưu phải là cây

trên đồ thị đầy đủ n đỉnh, mỗi đỉnh tương ứng với một thànhphố, với độ dài trên các cạnh chính là chi phí xây dựng đườngray nối hai thành phố tương ứng

Trang 34

Sơ đồ chung của các giải thuật

Generic-MST(G, c)

A = { }

//Bất biến: A là tập con các cạnh của CKNN nào đó

while A chưa là cây khung do

tìm cạnh (u, v) là an toàn đối với A

Trang 35

Lát cắt

 Ta gọi lát cắt (S, V S) là một cách phân hoạch tập

đỉnh V ra thành hai tập S và VS Ta nói cạnh e là

cạnh vượt lát cắt (S, VS) nếu một đầu mút của

nó là thuộc S còn đầu mút còn lại thuộc VS.

Giả sử A là một tập con các cạnh của đồ thị Lát

cắt (S,VS) được gọi là tương thích với A nếu

như không có cạnh nào thuộc A là cạnh vượt lát

cắt.

Trang 36

5

2

Trang 37

Lát cắt tương thích với tập cạnh

f

d a

44

Trang 38

Cạnh nhẹ

f

d a

Trang 39

Cạnh nhẹ là cạnh an toàn!

Định lý Giả sử (S, V – S) là lát cắt của G=(V, E) tương thích với

tập con A của E, và A là tập con của tập cạnh của CKNN của G Gọi (u, v) là cạnh nhẹ vượt lát cắt (S, V – S) Khi đó (u, v) là an toàn đối với A; nghĩa là, A{(u, v)} cũng vẫn là tập con

Trang 40

Tại sao cạnh nhẹ là an toàn ?

S

V – S

4

26

A{ (u, v) } T ', tức là, (u, v) là an toàn đối với A

Chứng minh. Giả sử T là CKNN (gồm các cạnh đỏ) chứa A.

Giả sử cạnh nhẹ (u, v)  T Ta có

T { (u, v) } chứa chu trình

Tìm được cạnh (x, y) T vượt lát cắt (S, V – S)

Cây khung T ' = T – { (x, y) } { (u, v) } có độ dài

độ dài của cây khung T Suy ra T ' cũng là CKNN.

Trang 41

Hệ quả Giả sử A là tập con của E và cũng là tập con của tập cạnh

của CKNN nào đó của G, và C là một thành phần liên thông trong

rừng F = (V, A) Nếu (u, v) là cạnh nhẹ nối C với một thành phần liên thông khác trong F, thì (u, v) là an toàn đối với A.

Cạnh (u, v) là cạnh nhẹ vượt lát cắt (C, V – C) tương thích với A

Theo định lý trên, cạnh (u, v) là an toàn đối với A.

8

Hệ quả

Trang 42

Tìm cạnh an toàn?

Giả sử A là tập con của tập cạnh của một CKNN nào đó

A là rừng.

Cạnh an toàn được bổ sung vào A có trọng số nhỏ nhất

trong số các cạnh nối các cặp thành phần liên thông của nó

Thuật toán Kruskal

Thuật toán Prim

A là cây

Cạnh an toàn là cạnh nhẹ nối đỉnh trong A với một đỉnh

không ở trong A

Trang 43

Thuật toán Kruskal:

nhỏ nhất T=(VT, ET) theo từng bước Trước hết sắp

xếp các cạnh của đồ thị G theo thứ tự không giảm

của trọng số Bắt đầu từET=∅, ởmỗi bước ta sẽ lần

lượt duyệt trong danh sách cạnh đã sắp xếp, từcạnh

có độ dài nhỏ đến cạnh có độ dài lớn hơn, để tìm ra

cạnh mà việc bổ sung nó vào tập ETkhông tạo thành

chu trình trong tập này Thuật toán sẽ kết thúc khi ta

thu được tập ETgồm n−1 cạnh

Trang 44

Cụ thể có thể mô tả như sau:

trọng số

dần các cạnh của dãy đã được xếp vào T theo

nguyên tắc cạnh them vào không được tạo thành

chu trình trong T

bằng n−1, ta thu được cây khung nhỏ nhất cần tìm

Trang 45

Thuật toán Kruskal

Thuật toán Kruskal

Generic-MST(G, c)

A = { }

//Bất biến: A là tập con các cạnh của CKNN nào đó

while A chưa là cây khung do

tìm cạnh (u, v) là an toàn đối với A

A = A {(u, v)}

// A vẫn là tập con các cạnh của CKNN nào đó

return A

Trang 46

Mô tả thuật toán Kruskal

Trang 47

Ví dụ:

Tìm cây khung nhỏ nhất của đồ thị cho trong

hình dưới đây:

Trang 48

Bây giờ số cạnh của T đã là 2 vẫn còn nhỏ hơn 6,

ta tiếp tục thêm cạnh tiếp theo trong dãy đã sắp

xếp vào T

Trang 49

Cách giải

Sau khi thêm cạnh (v4, v5) vào T, nếu thêm cạnh

(v5, v6) thì nó sẽ tạo thành với 2 cạnh (v4, v5),

(v4, v6) đã có trong T một chu trình

Tình huống tương tự cũng xãy ra đối với cạnh

(v3, v4) là cạnh tiếp theo trong dãy

Tiếp theo ta bổ sung cạnh (v1, v3), (v2, v3) vào T

và thu dược tập ET gồm 5 cạnh:

{(v3, v5), (v4, v6), (v4, v5), (v1, v3), (v2, v3)}

Trang 50

Bài tập

Tìm cây khung nhỏ nhất của đồ thị cho trong

hình dưới đây:

Trang 51

Bài tập

f

d a

Trang 53

Cách cài đặt hiệu quả

Vấn đề đặt ra là:

Khi cạnh ei=(j,k) được xét, ta cần biết có phải j và k

thuộc hai thành phần liên thông (tplt) khác nhau hay không Nếu đúng, thì cạnh này được bổ sung vào

cây khung và nó sẽ nối tplt chứa j và tplt chứa k.

 Thực hiện điều này như thế nào cho đạt hiệu quả?

Trang 54

Mỗi tplt C của rừng F được cất giữ như một tập.

tiên trong C.

thuộc cùng một tplt, tức là First(i) = First(j).

lớn hơn (nhiều đỉnh hơn):

Nếu |C| > |D|, thì First(CD) := First(C).

Cách cài đặt hiệu quả

Trang 55

Phân tích thời gian tính

cạnh Tổng cộng là O(m).

 Thời gian nối 2 tplt S và Q, giả thiết |S||Q|.

O(1) với mỗi đỉnh của Q (là tplt nhỏ hơn)

đỉnh của tplt chứa i tăng lên gấp đôi sau mỗi lần nối.)

Trang 56

Thuật toán Prim

A là cây (Bắt đầu từ cây chỉ có 1 đỉnh)

 Cạnh an toàn là cạnh nhẹ nhất trong

số các cạnh nối đỉnh trong A với một

đỉnh không ở trong A.

Trang 57

Thuật toán Prim

Thuật toán Kruskal làm việc kém hiệu quả đối với

những đồ thị dày (đồ thị có số cạnh m ≈n(n−1)/2)

Trong trường hợp đó, thuật toán Prim tỏ ra hiệu

quả hơn Thuật toán Prim còn được gọi là

phương pháp lân cận gần nhất

Trang 58

Mô tả thuật toán Prim

Gọi (u, v) là cạnh nhẹ nhất với uV(T) và vV(G) – V(T)

E(T) E(T) { (u, v) }; V(T) V(T) { v }

end

end;

Tính đúng đắn suy từ hệ quả đã chứng minh:

Giả sử A là tập con của E và cũng là tập con của tập cạnh của CKNN của G, và

C là một thành phần liên thông trong rừng F = (V, A) Nếu (u, v) là cạnh nhẹ

nối C với một tplt khác trong F, thì (u, v) là an toàn đối với A.

Trang 59

d a

Trang 60

d a

Trang 61

d a

4

5

2

Trang 62

d a

Trang 63

d a

4

5

2

Trang 64

d a

Trang 65

Thuật toán Prim

1 VT:={v*}, trong đó v*là đỉnh tuỳ ý của đồ thị G

ET:= ∅

2 Với mỗi đỉnh v j ∉VT, tìm đỉnh w j ∈VT sao cho

m(w j ,v j ) = min m(x i , v j )=:β j x i ∈VT và gán cho đỉnh v j

nhãn [w j , β j ] Nếu không tìm đuợc w j như vậy (tức là

khi v j không kề với bất cứ đỉnh nào trong VT) thì

gán cho v j nhãn [0, ∞].

3.Chọn đỉnh v j * sao cho β j *= min β j v j ∉VT

Trang 66

Thuật toán Prim

Nếu |VT| = n thì thuật toán dừng và (VT, ET) là

cây khung nhỏ nhất

Nếu |VT| < n thì chuyển sang Bước 4

4 Đối với tất cả các đỉnh v j ∉VT mà kề với v j *, ta

thay đổi nhãn của chúng như sau:

Nếu β j > m(v j *, v j ) thì đặt β j :=m(v j *, v j ) và nhãn của v j là [v j *, β j ] Ngược lại, ta giữ nguyên nhãn của

v j Sau đó quay lại Bước 3.

Trang 69

Cài đặt thuật toán Prim đối với đồ thị dày

2, , n}

sung vào cây khung, các đỉnh của đồ thị sẽ được gán cho các nhãn

Trang 70

H = ( S , T ) là cây khung nhỏ nhất của đồ thị ;

Thời gian tính: O(|V|

Trang 71

Thuật toán Prim – Ví dụ

Ví dụ: Tìm CKNN cho đồ thị cho bởi ma trận trọng số

Trang 72

Thuật toán Prim: Ví dụ

Trang 73

Thuật toán Prim: Ví dụ

Trang 74

Thuật toán Prim: Ví dụ

Trang 75

Thuật toán Prim: Ví dụ

Trang 76

Thuật toán Prim: Ví dụ

Trang 77

Thuật toán Prim: Ví dụ

Trang 78

Thuật toán Prim: Ví dụ

Trang 79

Người đề xuất bài toán MST

Otakar Borůvka

Nhà khoa học Séc (Czech)

Người đề xuất bài toán

Đề xuất thuật toán thời gian O(m log n)

Bài báo được xuất bản ở Séc từ năm

1926

Ứng dụng vào việc phát triển hệ thống

mạng điện ở Bohemia

Trang 80

Tăng tốc

O(m log n) Borůvka, Prim, Dijkstra, Kruskal,…

O(m log log n) Yao (1975), Cheriton-Tarjan (1976)

O(m log (m, n)) Gabow-Galil-Spencer-Tarjan (1986)

Optimal Pettie-Ramachandran (JACM 2002)

Trang 81

Bài tập

Tìm cây khung nhỏ nhất của đồ thị sau theo thuật

toán Kruskal và Prim

Trang 82

CHƯƠNG V

CÂY

Trang 83

Cây cũng được dùng để tạo ra các mã có hiệu quả để lưu trữ và truyền dữ liệu

Dùng cây có thể mô hình các thủ tục mà để thi hành nó cần dùng một dãy các quyết định

Trang 84

ĐỊNH NGHĨA VÀ CÁC TÍNH CHẤT CƠ BẢN

Định nghĩa: Cây là một đồ thị vô hướng liên thông, không chứa chu trình và có ít nhất hai đỉnh.

Một đồ thị vô hướng không chứa chu trình và có

ít nhất hai đỉnh gọi là một rừng.

Trong một rừng, mỗi thành phần liên thông là một cây.

Trang 85

Ví dụ:

Rừng sau có 3 cây

Trang 86

CÂY CÓ GỐC

Định nghĩa: Cây có hướng là đồ thị có hướng mà

đồ thị vô hướng nền của nó là một cây.

Cây có gốc là một cây có hướng, trong đó có một đỉnh đặc biệt, gọi là gốc, từ gốc có đường đi đến mọi đỉnh khác của cây.

Trang 87

Ví dụ:

Cây sau có nút gốc là r

Trang 88

Vẽ lại cây:

Trang 89

Nếu x là tiền bối của y thì y là hậu duệ của x

Nếu y, z là con của x thì y và z là anh em

Trang 90

Các khái niệm:

Nếu x không có con thì x là lá (leaf)

Nếu x không là lá thì x là đỉnh trong

Mức(level) của đỉnh x là chiều dài (số cành) của

đường đơn từ gốc v 0 tới x level(v 0 ) = 0

Chiều cao(height) của một cây là mức lớn nhất

trong cây

Cây con(subtree) của T gốc tại x là đồ thị con của

T mà:

Tập đỉnh gồm x và tất cả các hậu duệ của x

Tập các cành gồm mọi cành nối tới các hậu

duệ của x

Trang 91

Ví dụ:

Cha của c là b

Con của g là h, i, j

Các tiền bối của e là c, b, a

Các hậu duệ của b là c, d, e

Các đỉnh trong: a, b, c, g, h, j, k

Các lá : d, e, f, l, m, i, n, o

Trang 92

Cây có gốc thứ tự(Ordered rooted tree) nếu các

con của mỗi đỉnh trong được xếp thứ tự từ trái

qua phải

Trang 93

Các khái niệm:

Đặc biệt:Cây nhị phân có thứ tự:

Nếu một đỉnh trong có đủ 2 con thì

Con thứ nhất là con bên trái( left child)

Con thứ 2 là con bên phải ( right child)

Một m – cây với chiều cao h gọi là thăng bằng

nếu tất cả các lá đều ở mức h hay h-1.

Trang 94

Ví dụ:

Mô hình gia phả một dòng họ

Mô hình biểu diễn của các tổ chức

Mô hình tổ chức Trường Đại Học

Trang 95

Ví dụ:

Mô hình các tập tin trong máy tính

Các tập tin trong máy tính được tổ chức

thành các thư mục, các thư mục được tổ chức dưới dạng cây, trong đó thư mục gốc là gốc của cây.

Trang 96

Cây tìm kiếm nhị phân:

Một cây tìm kiếm nhị phân là một cây nhị phân T

mà trong đó:

Mỗi đỉnh được gán cho một nhãn

Các nhãn có thểso sánh được với nhau ∀ đỉnh

nhỏ hơn nhãn của v và các nhãn trong cây con bên phải của v đều lớn hơn nhãn của v

Trang 97

Ví dụ:

Cho dãy số: 30, 20, 10, 40, 32, 27, 17, 8, 42, 78, 35

Biểu diễn dãy số dưới dạng cây nhị phân tìm

kiếm.

Trang 98

Cây quyết định:

Cây quyết địnhlà cây có gốc mà:

Mỗi đỉnh tương ứng với 1 quyết định

Mỗi cây con tại các đỉnh này ứng với mỗi kết

cục có thể của của quyết định

Một lời giải là một đường đi từ gốc đến lá

Ngày đăng: 30/08/2023, 14:43

HÌNH ẢNH LIÊN QUAN

Đồ thị G. - Bài giảng môn lý thuyết đồ thị   chương 4 bài toán cây khung nhỏ nhất
th ị G (Trang 7)
Sơ đồ chung của các giải thuật - Bài giảng môn lý thuyết đồ thị   chương 4 bài toán cây khung nhỏ nhất
Sơ đồ chung của các giải thuật (Trang 34)
Hình dưới đây: - Bài giảng môn lý thuyết đồ thị   chương 4 bài toán cây khung nhỏ nhất
Hình d ưới đây: (Trang 47)
Hình dưới đây: - Bài giảng môn lý thuyết đồ thị   chương 4 bài toán cây khung nhỏ nhất
Hình d ưới đây: (Trang 50)
Hình dưới đây: - Bài giảng môn lý thuyết đồ thị   chương 4 bài toán cây khung nhỏ nhất
Hình d ưới đây: (Trang 51)

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm