AI & Data Dreamers練功房
寶箱片場規則
ALGO GATES・演算法關卡・高階・4 題

演算法高階・圖與拓撲

這一頁是題幹試閱;登入/註冊後每題可以在瀏覽器裡執行、對答案,第一次交對 +10 XP。

  1. 01

    DAG 任務執行順序

    困難拓撲排序

    排程器拿到一份任務依賴清單,每條「A B」表示 A 必須在 B 之前完成。請排出一個合法的執行順序;若依賴有循環,就無法排程。

    為了答案唯一:每次從「目前沒有未完成前置任務」的任務中,挑名稱字母序最小的先執行。

    輸入:

    第 1 行:m(依賴條數)

    接下來 m 行:A B

    輸出:可排程就印一行執行順序(空白分隔);有循環就印「CYCLE」加上「無法排入的任務」(字母序、空白分隔)。

    範例輸入:

    3

    a b

    b c

    c b

    範例輸出:

    CYCLE b c

    類型對應:LeetCode「Course Schedule II」類(情境與敘述為本平台改寫)。

    輸入請用 input() 逐行讀取(平台不支援 sys.stdin)。執行時平台會把每一行測資回顯在輸出最前面,這是正常的,不用自己印。本題在瀏覽器內以 Pyodide 執行,只用標準函式庫。先把全部輸入讀完再輸出,不要在迴圈裡邊讀邊印(回顯行會插進輸出中間,就對不上答案)。

    作答登入後可作答
  2. 02

    服務依賴最短跳數

    困難圖 BFS

    微服務之間的呼叫關係是有向圖(「A B」表示 A 會呼叫 B)。發生事故時,要知道從入口服務出發,最少經過幾次呼叫可以到達出錯的服務,以及那條路徑。

    輸入:

    第 1 行:m(邊數)

    接下來 m 行:A B

    最後一行:起點 終點

    輸出:可到達就印兩行「跳數」與「路徑(以 -> 連接)」。同樣短的路徑有多條時,從起點開始逐站比較服務名稱,取字母序最小的那條。到不了印 UNREACHABLE。

    範例輸入:

    4

    a b

    b d

    a c

    c d

    a d

    範例輸出:

    2

    a -> b -> d

    類型對應:LeetCode「Shortest Path in Unweighted Graph」類(情境與敘述為本平台改寫)。

    輸入請用 input() 逐行讀取(平台不支援 sys.stdin)。執行時平台會把每一行測資回顯在輸出最前面,這是正常的,不用自己印。本題在瀏覽器內以 Pyodide 執行,只用標準函式庫。先把全部輸入讀完再輸出,不要在迴圈裡邊讀邊印(回顯行會插進輸出中間,就對不上答案)。

    作答登入後可作答
  3. 03

    資料同步延遲

    困難最短路徑(Dijkstra)

    主節點寫入一筆資料後,要透過複製鏈路同步到所有節點。每條鏈路「A B w」表示 A 同步到 B 需要 w 毫秒(單向)。各節點收到資料後會立刻往下游同步。

    輸入:

    第 1 行:n m(節點編號 1..n,m 條鏈路)

    接下來 m 行:A B w

    最後一行:主節點編號

    輸出:兩行

    第 1 行:每個節點最早收到資料的時間(節點 1..n 依序,空白分隔;收不到印 -1)

    第 2 行:所有節點都收到的時間;有節點收不到就印 -1

    範例輸入:

    3 2

    1 2 5

    2 3 4

    1

    範例輸出:

    0 5 9

    9

    類型對應:LeetCode「Network Delay Time」類(情境與敘述為本平台改寫)。

    輸入請用 input() 逐行讀取(平台不支援 sys.stdin)。執行時平台會把每一行測資回顯在輸出最前面,這是正常的,不用自己印。本題在瀏覽器內以 Pyodide 執行,只用標準函式庫。先把全部輸入讀完再輸出,不要在迴圈裡邊讀邊印(回顯行會插進輸出中間,就對不上答案)。

    作答登入後可作答
  4. 04

    跨來源帳號歸戶

    困難併查集

    會員資料來自三個系統,同一個人可能有多筆紀錄。只要兩筆紀錄有任何一個 email 相同,就屬於同一個人(具傳遞性:A 和 B 共用一個 email、B 和 C 共用另一個,A、B、C 都是同一人)。

    輸入:

    第 1 行:n(紀錄數)

    接下來 n 行:紀錄編號 email1 email2 ...(至少一個 email)

    輸出:每個人一行:該人所有紀錄編號(字母序,以逗號連接)+空白+所有 email 數量。各行依「第一個紀錄編號」排序。

    範例輸入:

    3

    r1 a@m b@m

    r2 c@m

    r3 b@m d@m

    範例輸出:

    r1,r3 3

    r2 1

    類型對應:LeetCode「Accounts Merge」類(情境與敘述為本平台改寫)。

    輸入請用 input() 逐行讀取(平台不支援 sys.stdin)。執行時平台會把每一行測資回顯在輸出最前面,這是正常的,不用自己印。本題在瀏覽器內以 Pyodide 執行,只用標準函式庫。先把全部輸入讀完再輸出,不要在迴圈裡邊讀邊印(回顯行會插進輸出中間,就對不上答案)。

    作答登入後可作答