拓撲排序 工程

2021-10-09 07:07:40 字數 1868 閱讀 8939

張三是某工程公司的專案工程師。一天公司接下一項大型工程,該公司在大型工程的施工前,先要把整個工程劃分為若干個子工程,並把這些子工程編號為1,2

,…,n

1,2,…,n

1,2,…,

n;這樣劃分之後,子工程之間就會有一些依賴關係,即一些子工程必須在某些子工程完成之後才能施工,公司需要工程師張三計算整個工程最少的完成時間。

對於上面問題,可以假設:

1、根據預算,每乙個子工程都有乙個完成時間。

2、子工程之間的依賴關係是:部分子工程必須在一些子工程完成之後才開工。

3、只要滿足子工程間的依賴關係,在任何時刻可以有任何多個子工程同時在施工,也即同時施工的子工程個數不受限制。

例如:有五個子工程的工程規劃表:

1-1−1。第1行為正整數n,表示子工程的個數(n

nn<=200

20020

0)第2行為n個正整數,分別代表子工程1、2

、…、n

1、2、…、n

1、2、…、

n的完成時間。

第3行到n+2行,每行有n-1個0或1,其中的第k+2行的這些0或1,分別表示「子工程k」與子工程1、2

、…、k

−1、k

+1、…

、n1、2、…、k-1、k+1、…、n

1、2、…、

k−1、

k+1、

…、n的依賴關係(k=1

、2、…

、nk=1、2、…、n

k=1、2、

…、n)。每行資料之間均用空格分開。

如果子工程劃分合理則輸出完成整個工程最少要用的時間,如果子工程劃分不合理,則輸出−1-1

−1。5

5 4 12 7 2

0 0 0 0

0 0 0 0

0 0 0 0

1 1 0 0

1 1 1 1

看題目,我們就想到了拓撲排序,以入度為0

00的子工程起手,用dp來計算最少花費的時間

本題解使用鏈結表

#include

#include

#include

using

namespace std;

long

long n,m,x1,y1,tot;

long

long ans=

0,head[

10005

],f[

10005

],c[

10005

],p[

10005

],du[

10005];

struct node

a[40005];

void

add(

long

long x,

long

long y)

; head[x]

=tot;

}voidtp(

)while

(h}}

intmain()

for(

long

long i=

1;i<=n;

++i)f[i]

=100;tp

();for

(long

long i=

1;i<=n;

++i)

ans+

=f[i];}

printf

("%d"

,ans)

;}

拓撲排序 工程

description 張三是某工程公司的專案工程師。一天公司接下一項大型工程,該公司在大型工程的施工前,先要把整個工程劃分為若干個子工程,並把這些子工程編號為1 2 n 這樣劃分之後,子工程之間就會有一些依賴關係,即一些子工程必須在某些子工程完成之後才能施工,公司需要工程師張三計算整個工程最少的完...

工程安排(拓撲排序)

讀入檔案project.txt 810 1 2 3 4 5 6 7 8 1,2,6,a 1,5,2,b 2,3,3,c 2,4,5,d 2,5,3,e 3,7,2,f 4,7,3,g 5,6,4,h 6,7,2,i 7,8,2,j include include include define max...

python 拓撲排序 Python 拓撲排序

python 拓撲排序 在圖論中,由乙個有向無環圖的頂點組成的序列,當且僅當滿足下列條件時,稱為該圖的乙個拓撲排序 英語 topological sorting 每個頂點出現且只出現一次 若a在序列中排在b的前面,則在圖中不存在從b到a的路徑。print 拓撲排序結果 g.topologicalso...