สมมติว่ามีเมืองจำนวน n และถนน m ที่เชื่อมระหว่างเมือง พลเมืองของประชาชนต้องการตลาดที่พวกเขาสามารถซื้อสินค้าได้ ขณะนี้ ไม่มีตลาดในเมือง และถนนระหว่างเมืองอยู่ระหว่างการก่อสร้าง ถนนสองทางสามารถสร้างขึ้นระหว่างสองเมืองได้ ถ้า (i) เมืองนี้มีตลาด (ii) สามารถเยี่ยมชมเมืองได้ตามถนนที่มีตลาด ค่าใช้จ่ายในการสร้างถนนคือ x และการสร้างตลาดคือ y และจะได้รับ เราต้องหาต้นทุนขั้นต่ำในการเข้าถึงตลาดให้กับพลเมืองของแต่ละเมือง 'เมือง' ของอาเรย์ประกอบด้วยข้อมูลเกี่ยวกับเมืองที่เมืองต่างๆ สามารถเชื่อมต่อด้วยถนนได้
ดังนั้น หากอินพุตเป็น n =4, m =3, x =1, y =2, เมือง =[[1, 2], [2, 3], [3, 4]] ผลลัพธ์จะเป็น 4.

ในที่นี้ เราจะเห็นสี่เมือง 1, 2, 3 และ 4 หากตลาดสร้างเมืองที 1 และถนนอีกสองแห่งถูกสร้างขึ้นระหว่าง (1, 4) และ (1,3) ค่าใช้จ่ายทั้งหมดจะเป็น 2 + 1 +1 =4 นี่คือต้นทุนขั้นต่ำ
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- ถ้า x <=y แล้ว
- ส่งคืน n * x
- มิฉะนั้น
- adj_list :=แผนที่ที่มีรายการเป็นองค์ประกอบ
- สำหรับแต่ละเมืองในเมือง ทำ
- city1 :=เมือง[0]
- city2 :=เมือง[1]
- แทรก city2 ที่ส่วนท้ายของ adj_list[city1]
- แทรก city1 ที่ส่วนท้ายของ adj_list[city2]
- temp :=รายการขนาดใหม่ (n + 1) เริ่มต้นด้วยค่า True
- ค่า :=0
- dq :=คิวที่สิ้นสุดสองครั้ง
- สำหรับ cur ในช่วง 1 ถึง n + 1 ทำ
- ถ้า temp[cur] ไม่ใช่ศูนย์ แล้ว
- ค่า :=ค่า + x
- แทรก cur ที่ปลายขวาสุดของ dq
- อุณหภูมิ[cur] :=เท็จ
- ในขณะที่ dq ไม่ว่างเปล่า ให้ทำ
- สำหรับแต่ละ i adj_list[แยกองค์ประกอบซ้ายสุดของ dq] ทำ
- ถ้า temp[i] ไม่ใช่ศูนย์ แล้ว
- แทรก i ที่ปลายขวาสุดของ dq
- อุณหภูมิ[i] :=เท็จ
- ค่า :=ค่า + y
- ถ้า temp[i] ไม่ใช่ศูนย์ แล้ว
- ถ้า temp[cur] ไม่ใช่ศูนย์ แล้ว
- คืนค่า
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
from collections import defaultdict, deque
def solve(n, m, x, y, cities):
if x <= y:
return n * x
else:
adj_list = defaultdict(list)
for city in cities:
city1 = city[0]
city2 = city[1]
adj_list[city1].append(city2)
adj_list[city2].append(city1)
temp = [True] * (n + 1)
value = 0
dq = deque()
for cur in range(1, n + 1):
if temp[cur]:
value += x
dq.append(cur)
temp[cur] = False
while dq:
for i in adj_list[dq.popleft()]:
if temp[i]:
dq.append(i)
temp[i] = False
value += y
return value
print(solve(4, 3, 1, 2, [[1, 2], [2, 3], [3, 4]])) อินพุต
4, 3, 2, 1, [[1, 2], [2, 3], [3, 4]]
ผลลัพธ์
4