工程
張三是某工程公司的專案工程師。一天公司接下一項大型工程,該公司在大型工程的施工前,先要把整個工程劃分為若干個子工程,並把這些子工程編號為1、2、…、n
nn;這樣劃分之後,子工程之間就會有一些依賴關係,即一些子工程必須在某些子工程完成之後才能施工,公司需要工程師張三計算整個工程最少的完成時間。
對於上面問題,可以假設:
1、根據預算,每乙個子工程都有乙個完成時間。
2、子工程之間的依賴關係是:部分子工程必須在一些子工程完成之後才開工。
3、只要滿足子工程間的依賴關係,在任何時刻可以有任何多個子工程同時在施工,也即同時施工的子工程個數不受限制。
例如:有五個子工程的工程規劃表:
現在對於給定的子工程規劃情況,及每個子工程完成所需的時間,如果子工程劃分合理則求出完成整個工程最少要用的時間,如果子工程劃分不合理,則輸出-1。
第1行為正整數n
nn,表示子工程的個數(n
nn<=200)
第2行為n
nn個正整數,分別代表子工程1、2、…、n
nn的完成時間。
第3行到n
nn+2行,每行有n
nn-1個0或1,其中的第k
kk+2行的這些0或1,分別表示「子工程k」與子工程1、2、…、k
kk-1、k
kk+1、…、n
nn的依賴關係(k
kk=1、2、…、n
nn)。每行資料之間均用空格分開。
如果子工程劃分合理則輸出完成整個工程最少要用的時間,如果子工程劃分不合理,則輸出-1。
input 1
55 4 12 7 2
0 0 0 0
0 0 0 0
0 0 0 0
1 1 0 0
1 1 1 1
output 1
14input 2
55 4 12 7 2
0 1 0 0
0 0 0 0
0 0 1 0
1 1 0 0
1 1 1 1
output 2
-1入度為0的點作為起點進入佇列
根據佇列裡的數做dfs
dfsdf
s(df
sdfs
dfs時會有新的數進入)
如果有子工程是以當前點為依賴
入度減1,,它的時間更新
入度若為0就加入佇列
最後答案在出度為0的點中找最大值
如果有數沒有進入過佇列
說明存在環
輸出-1
#include#include#include#includeusing namespace std;
int f[220],s[220],a[220][220],c[220],r[220],q[220],h,t,n,ans,sum;
bool p[220];
void dfs(int d) }}
int main()
t=0,sum=n;
for (int i=1;i<=n;i++)
if (!r[i])
while (h
for (int i=1;i<=n;i++)
if (!c[i]) //沒有人依賴它
ans=max(ans,f[i]); //更新答案
if (t
printf("-1");
else printf("%d",ans);
return 0;
}
東莞市2023年資訊學特長生測試題 工具軟體
description 大家都知道任何資料 符號在計算機中都是以二進位制的形式表示的。小明是某軟體公司的工程師,公司應客戶的需要,要開發乙個小工具程式,用來實現任意進製之間的轉換。可以將給定的m進製數x轉化為n進製的p 所有數資料均能在長整型範圍內處理 現在也將這個任務交給你,請你來完成這個程式。i...
2023年東莞市資訊學特長生測試題 島嶼的緣分
2009年東莞市資訊學特長生測試題 島嶼的緣分 time limit 10000ms memory limit 65536k total submit 102 accepted 52 case time limit 1000ms description 人和人的相識是一種緣分,其實人有幸到某地也是一...
東莞市2023年特長生 T3 工程
一天公司接下一項大型工程,該公司在大型工程的施工前,先要把整個工程劃分為若干個子工程,並把這些子工程編號為1 2 n 1 2 n 1 2 n 這樣劃分之後,子工程之間就會有一些依賴關係,即一些子工程必須在某些子工程完成之後才能施工,公司需要工程師張三計算整個工程最少的完成時間。對於上面問題,可以假設...