網路流 24 題 軟體補丁

2021-08-06 07:09:01 字數 2543 閱讀 8930

題目描述

某公司發現其研製的乙個軟體中有 n n

n 個錯誤,隨即為該軟體發放了一批共 m m

m 個補丁程式。每乙個補丁程式都有其特定的適用環境,某個補丁只有在軟體中包含某些錯誤而同時又不包含另一些錯誤時才可以使用。乙個補丁在排除某些錯誤的同時,往往會加入另一些錯誤。

換句話說,對於每乙個補丁 i i

i,都有 2 2

2 個與之相應的錯誤集合 b1(i) b_1(i)b​

1​​(

i)和 b2(i) b_2(i)b​

2​​(

i),使得僅當軟體包含 b1(i) b_1(i)b​

1​​(

i)中的所有錯誤,而不包含 b2(i) b_2(i)b​

2​​(

i)中的任何錯誤時,才可以使用補丁 i i

i。補丁 i i

i將修復軟體中的某些錯誤 f1(i) f_1(i)f​

1​​(

i),而同時加入另一些錯誤 f2(i) f_2(i)f​

2​​(

i)。另外,每個補丁都耗費一定的時間。

試設計乙個演算法,利用公司提供的 m m

m 個補丁程式將原軟體修復成乙個沒有錯誤的軟體,並使修復後的軟體耗時最少。

輸入格式

檔案第 1 1

1 行有 2 2

2 個正整數 n n

n 和 m m

m,n n

n 表示錯誤總數,m m

m 表示補丁總數。接下來 m m

m 行給出了 m m

m 個補丁的資訊。每行包括乙個正整數,表示執行補丁程式 i i

i 所需時間,以及 2 2

2 個長度為 n n

n 的字串,中間用乙個空格符隔開。

第 1 1

1 個字串中,如果第 k k

k 個字元 bk b_kb​

k​​ 為+,則表示第 k k

k 個錯誤屬於 b1(i) b_1(i)b​

1​​(

i)。若為-,則表示第 k k

k 個錯誤屬於 b2(i) b_2(i)b​

2​​(

i),若為0,則第 k k

k 個錯誤既不屬於 b1(i) b_1(i)b​

1​​(

i)也不屬於 b2(i) b_2(i)b​

2​​(

i),即軟體中是否包含第 k k

k 個錯誤並不影響補丁 i i

i 的可用性。

第 2 2

2 個字串中,如果第 k k

k 個字元 bk b_kb​

k​​ 為+,則表示第 k k

k 個錯誤屬於 f1(i) f_1(i)f​

1​​(

i),若為-,則表示第 k k

k 個錯誤屬於 f2(i) f_2(i)f​

2​​(

i),若為0,則第 k k

k 個錯誤既不屬於 f1(i) f_1(i)f​

1​​(

i)也不屬於 f2(i) f_2(i)f​

2​​(

i),即軟體中是否包含第 k k

k 個錯誤不會因使用補丁 i i

i 而改變。

輸出格式

輸出最小耗時,如果問題無解,則輸出 0 00。

樣例樣例輸入

3 3

1 000 00-

1 00- 0-+

2 0-- -++

樣例輸出

8
這題可以直接spfa。每種狀態安位轉化,那麼(1<
對於每個補丁的要求和產生的效果可以用不同的狀態表示,所以可用用spfa狀態轉移求最小花費。
#include#include#include#includeusing namespace std;

const int maxm = 105;

const int inf = 1e9 + 7;

int b1[maxm], b2[maxm], f1[maxm], f2[maxm], dis[1200005], cost[maxm];

int s, t, n, m;

char str[maxm];

void spfa();

int main()

scanf("%s", str);

for (j = 0;j < n;j++)

}s = (1 << n) - 1, t = 0;

spfa();

if (dis[t] == inf) printf("0\n");

else printf("%d\n", dis[t]);

return 0;

}void spfa()

}} }

}

網路流 24 題 10 軟體補丁

題意 一開始有乙個軟體有n個bug,然後開發商整了m個補丁。對於每乙個補丁都有四個集合b1,b2,f1,f2和乙個整數cost組成。對於對於當前軟體能夠使用乙個補丁當且僅當,b1集合裡的所有bug都出現在當前軟體內,b2集合中的所有bug都不出現在當前軟體內。這個時候使用補丁的效果就是 如果f1中的...

網路流24題 軟體補丁問題

description t 公司發現其研製的乙個軟體中有 n 個錯誤,隨即為該軟體發放了一批共 m 個補丁程式。每乙個補丁程式都有其特定的適用環境,某個補丁只有在軟體中包含某些錯誤而同時又不包含另一些錯誤時才可以使用。乙個補丁在排除某些錯誤的同時,往往會加入另一些錯誤。換句話說,對於每乙個補丁 i ...

網路流24題 軟體補丁問題

題目傳送門 好久之前做的 2,現在才寫部落格 填一下網路流24題的坑 狀壓集合 b1,b2 對於乙個補丁 i 向 b1 i 和 b2 i 之間連一條邊權為所需時間的單向邊 然後跑最短路就好了 又是一道沒有網路流的網路流24題 include include include include inclu...