關鍵子工程

2021-07-13 22:13:14 字數 2477 閱讀 1511

在大型工程的施工前, 我們把整個工程劃分為若干個子工程, 並把這些子工程編號為 1、

2、……

、n;

這樣劃分之後,子工程之間就會有一些依賴關係,即一些子工程必須在某些子工程完成之後才能施工。

由於子工程之間有相互依賴關係, 因此有兩個任務需要我們去完成:

首先,我們需要計算整個工程最少的完成時間;

同時,由於一些不可**的客觀因素會使某些子工程延期, 因此我們必須知道哪些子工程的延期會影響整個工程的延期, 我們把有這種特徵的子工程稱為關鍵子工程, 因此第二個任務就是找出所有的關鍵子工程, 以便集中精力管理好這些子工程,盡量避免這些子工程延期,達到用最快的速度完成整個工程。

為了便於程式設計,現在我們假設:

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

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

(3)只要滿足子工程間的依賴關係,在任何時刻可以有任何多個子工程同時在施工,

也既同時施工的子工程個數不受限制。

(4)整個工程的完成是指:所有子工程的完成。

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

完成時間

子工程 1

子工程 2

子工程 3

子工程 4

子工程 5

子工程 150

000子工程 240

000子工程 3120

000子工程 471

100子工程 521

111

其中,**中第 i+

1 行 j+

2 列的值如為

0 表示「子工程

i」可以在「子工程

j 」沒完成前施工,為

1表示「子工程

i 」必須在「子工程

j」完成後才能施工。

上述工程最快完成時間為

14 天,其中子工程

1 、3、

4 、

5為關鍵子工程。 第

1 行為 n,

n 是子工程的總個數,n≤

200。 第 2

行為 n個正整數,分別代表子工程

1 、

2、……、

n 的完成時間。 第 3

行到 n+2

行,每行有 n−

1 個

0 或 1。

其中的第 i+

2 行的這些

0 ,

1,分別表示「子工程

i 」與子工程 1、

2 、…、i−

1、i+

1 、…

n 的依賴關係, (i=

1、2、

……、n

) 。

每行資料之間均用乙個空格分開。

如子工程劃分不合理,則輸出 −1

; 如子工程劃分合理,則用兩行輸出: 第 1

行為整個工程最少的完成時間。 第 2

行為按由小到大順序輸出所有關鍵子工程的編號。

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

14

1 3 4 5

#include 

#include

#include

#include

#define max(x,y) ((x)>(y)?(x):(y))

using

namespace

std;

int head[210],nxt[100000],data[100000];

int head2[210],nxt2[100000],data2[100000];

int n,cnt,ans,tot;

int time[210];

int r[210],f[210];

stack

s;priority_queue,greater >q;

void add(int x,int y)

void dfs(int now)

int main()

}for(int i=1;i<=n;i++)

if(r[i]==0)

while(!s.empty())

}if(tot!=n)

for(int i=1;i<=n;i++)ans=max(ans,f[i]);

printf("%d\n",ans);

for(int i=1;i<=n;i++)

if(f[i]==ans)

dfs(i);

int pre=-1;

while(!q.empty())

return

0;}

動態規劃 關鍵子工程

在大型工程的施工前,我們把整個工程劃分為若干個子工程,並把這些子工程編號為1 2 n 這樣劃分之後,子工程之間就會有一些依賴關係,即一些子工程必須在某些 子工程完成之後才能施工。由於子工程之間有相互依賴關係,因此有兩個任務需要我們去完 成 首先,我們需要計算整個工程最少的完成時間 同時,由於一些不可...

spring mvc中輸入關鍵子查詢的步驟

在spring mvc hibernate mysql中,講解下如何做比如在文字框裡輸入中文,然後查詢的一些套路。1 mysql中,首先要做到的是my.ini的客戶編碼為utf8,而資料庫中的表,表裡的字段也用utf 8來整理 2 在serachcontroller中,如下結構 獲得關鍵字 stri...

js中的關鍵子in的使用方法

in.從字面上理解就是什麼在什麼中,在js中差不多也是表達這個意思,主要作用是判斷陣列元素或者物件屬性,也用來遍歷陣列和物件 使用方法 1.判斷 x in arr 這裡要注意的是判斷陣列的話 x表示的是下標,這個意識就是arr陣列中有下標為x的元素嗎 x in obj 現在的x表示的是物件的屬性,這...