在大型工程的施工前,我們把整個工程劃分為若干個子工程,並把這些子工程編號為1、
2、……、n;這樣劃分之後,子工程之間就會有一些依賴關係,即一些子工程必須在某些
子工程完成之後才能施工。由於子工程之間有相互依賴關係,因此有兩個任務需要我們去完
成:首先,我們需要計算整個工程最少的完成時間;同時,由於一些不可**的客觀因素會
使某些子工程延期,因此我們必須知道哪些子工程的延期會影響整個工程的延期,我們把有
這種特徵的子工程稱為關鍵子工程,因此第二個任務就是找出所有的關鍵子工程,以便集中
精力管理好這些子工程,盡量避免這些子工程延期,達到用最快的速度完成整個工程。為了
便於程式設計,現在我們假設:
(1)根據預算,每乙個子工程都有乙個完成時間。
(2)子工程之間的依賴關係是:部分子工程必須在一些子工程完成之後才開工。
(3)只要滿足子工程間的依賴關係,在任何時刻可以有任何多個子工程同時在施工,
也既同時施工的子工程個數不受限制。
(4)整個工程的完成是指:所有子工程的完成。
例如,有五個子工程的工程規劃表:
序號 完成時間 子工程1 子工程2 子工程3 子工程4 子工程5
子工程1 5 - 0 0 0 0
子工程2 4 0 - 0 0 0
子工程3 12 0 0 - 0 0
子工程4 7 1 1 0 - 0
子工程5 2 1 1 1 1 -
其中,**中第 i+1 行 j+2 列的值如為 0 表示「子工程 i」可以在「子工程 j」沒完成
前施工,為 1 表示「子工程 i」必須在「子工程 j」完成後才能施工。上述工程最快完成時
間為 14 天,其中子工程1、3、4、5為關鍵子工程。
又例如,有五個子工程的工程規劃表:
序號 完成時間 子工程1 子工程2 子工程3 子工程4 子工程5
子工程1 5 - 0 1 0 0
子工程2 4 0 - 0 0 0
子工程3 12 0 0 - 1 0
子工程4 7 1 1 0 - 0
子工程5 2 1 1 1 1 -
上述的子工程劃分不合理,因為無法安排子工程1,3,4的施工。
輸入資料:
第 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行為按由
小到大順序輸出所有關鍵子工程的編號。
樣例:
輸入檔名:project.in
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
輸出檔名:project.out
14 1 3 4 5
可用記憶化搜尋或者拓撲排序解決。
狀態:用f[i]表示完成i所需的最小時間及等待時間。
轉移方程:f[i] = max(f[j]) + t[i],其中,j是i的前驅結點。
accode:
#include #include #include #include using std::bitset;
using std::max;
const char fi = "project.in";
const char fo = "project.out";
const int maxn = 210;
struct edge;
edge *edge[maxn];
int f[maxn];
int t[maxn];
int ou[maxn];
bitset key;
bitset marked;
int n, ok;
void init_file()
void insert(int u, int v)
void readdata()
}for (int i = 1; i < n + 1; ++i)
if (ou[i] == 0) insert(0, i);
} void dp(int u)
//判斷是否存在環。
dp(v);
f[u] = max(f[u], f[v]);
}f[u] += t[u];
marked.reset(u); //要記得清空標記。
} void find(int u)
}void work()
int main()
關鍵子工程
在大型工程的施工前,我們把整個工程劃分為若干個子工程,並把這些子工程編號為 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表示的是物件的屬性,這...