APCS202306第4題 開啟寶盒
zerojudge網址:https://zerojudge.tw/ShowProblem?problemid=k734
輸出說明
輸出一個正整數,代表可以開啟的寶盒數量。
範例輸入 #1
5 5 1
2 0 1
0
2
4
3
1
1
2
4
3
3
範例輸出 #1
3
範例輸入 #2
10 8 2
3 6 5 2
5 6
2 7
2 0
4 5
5 1
3 0
4 2
2 4
5 3
5 6
5 0
0 6
1 7
3 2
2 1
7 3
4 7
4 5
4 1
7 5
範例輸出 #2
5
鑰匙可以重複使用,只要有該種類的鑰匙就可以開所有需要該鑰匙的寶盒。
使用一維的deque記錄每個key可以開啟的寶盒,命名為key。使用一維的deque記錄每個box可以獲得的鑰匙,命名為box。
Step1)將開始的t種鑰匙加入陣列has,每次拿一把鑰匙開啟能開啟的寶盒,且visit確認每種鑰匙只考慮一次,該開始寶盒的in-degree為k,每找到一個鑰匙,in-degree就遞減1。
Step2)若該寶盒的k個鑰匙都找到,in-degree會是0,則將能獲得的鑰匙,去除重複加到陣列has,能開啟的寶盒增加1。
Step3)重複以上動作直到陣列has為空的。
此演算法類似於拓樸排序(topological sorting)。