e116: Q-7-7. AOV 最早完工時間
Tags : DAG
Accepted rate : 1人/1人 ( 100% ) [非即時]
評分方式:
Tolerant

最近更新 : 2024-03-04 11:52

Content

某個計劃有 n 項工作,以 1~n 編號,工作之間有前置關係,我們用一個點代表一項工作,以邊(a,b)表示 a 是 b 的前置工作,也就是說 a 完成之後,工作 b 才能開始。每一項工作 v 有一個需求的工作時間 w[v],代表該工作至少需要耗時 w[v]才能完成。

本題要計算此計畫的最早完工時間,也就是計畫開始後,最早可以完成所有工作的時間。此外,對於某個工作,如果該工作的任何延誤都會讓整個計畫的最早完工時間延後,這個工作就稱為關鍵工作,否則稱為非關鍵工作。請計算那些工作是關鍵工作。

舉例來說,n=3,前置關係有(1,3)與(2,3),代表工作 1 完成後才可以開始工作 3,相同的,工作 2 完成後才可以開始工作 3。需求工時為 w[1]=1, w[2]=3, w[3]=4。我們可以看得出,工作 1 與 2 可以一起開始平行作業,在時間 1 時可以完成工作 1,時間 3 時可以完成工作 2,因此工作 3 最早可以開始的時間是 3,而最早的完工時間是 7。這三項工作中,工作 2 與 3 是關鍵工作,但工作 1 不是,因為工作 1 只要不花超過 3 的工時(延誤超過 2),並不會影響整個計劃的最早完工時間。

Time limit: 1 秒

Input

第一行是兩個正整數 n 與 m,代表工作數與前置關係數,點以 1~n 編號,第二行是 n 個正整數,依序代表每一個工作的需求工時 w[v],接下來有 m 行,每行兩個整數 u 與 v,代表 u 是 v 的前置工作。n 不超過 1e4,m 不超過 1e5,w 不超過 1e3。輸入保證有解。

Output

第一行輸出最早完工時間,第二行輸出那些工作是關鍵工作,輸出時依照工作的編號由小到大,相鄰兩數字之間以一個空白分格。

Sample Input
範例一:
3 2
1 3 4
1 3
2 3

範例二:
4 4
1 2 3 4
1 2
1 3
1 4
3 4
Sample Output
範例一:
7
2 3

範例二:
8
1 3 4
測資資訊:
記憶體限制: 64 MB
公開 測資點#0 (20%): 1.0s , <1M
公開 測資點#1 (20%): 1.0s , <1M
公開 測資點#2 (20%): 1.0s , <1M
公開 測資點#3 (20%): 1.0s , <1M
公開 測資點#4 (20%): 1.0s , <1M
Hint :
Tags:
DAG
出處:
AP325 [管理者:
mcjksieu005 (mcjksieu005)
]


ID User Problem Subject Hit Post Date
沒有發現任何「解題報告」