網路流24題 軟體補丁問題

2022-05-31 04:24:11 字數 2026 閱讀 8002

description

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

換句話說,對於每乙個補丁$i$,都有$2$個與之相應的錯誤集合$b_1[i],b_2[i]$,使得僅當軟體包含$b_1[i]$中的所有錯誤,而不包含$b_2[i]$中的任何錯誤時,才可以使用補丁$i$。補丁$i$將修復軟體中的某些錯誤$f_1[i]$,而同時加入另一些錯誤$f_2[i]$。另外,每個補丁都耗費一定的時間。

試利用$t$公司提供的$m$個補丁程式將原軟體修復成乙個沒有錯誤的軟體,並使修復後的軟體耗時最少。

input

第$1$行有$2$個正整數$n,m$,$n$表示錯誤總數,$m$表示補丁總數。

接下來$m$行給出了$m$個補丁的資訊。每行包括乙個正整數,表示執行補丁程式$i$所需時間,以及$2$個長度為$n$的字串,中間用乙個空格符隔開。第$1$個字串中,如果第$k$個字元$b_k$為「+」,則表示第$k$個錯誤屬於$b_1[i]$,若為「-」,則表示第$k$個錯誤屬於$b_2[i]$,若為「$0$」,則第$k$個錯誤既不屬於$b_1[i]$也不屬於$b_2[i]$,即軟體中是否包含第$k$個錯誤並不影響補丁$i$的可用性。第$2$個字串中,如果第$k$個字元$b_k$為「-」,則表示第$k$個錯誤屬於$f_1[i]$,若為「+」,則表示第$k$個錯誤屬於$f_2[i]$,若為「$0$」,則第$k$個錯誤既不屬於$f_1[i]$也不屬於$f_2[i]$,即

軟體中是否包含第$k$個錯誤不會因使用補丁$i$而改變。

output

一行乙個整數,表示最短耗時。如果問題無解,則輸出$0$。

sample input

3 3

1 000 00-

1 00- 0-+

2 0-- -++

sample output

hint

$1\;\leq\;n\;\leq\;20, 1\;\leq\;m\;\leq\;100$

solution

將每種錯誤情況二進位制狀壓表示,可轉移的連一條權值為時間的邊,跑最短路.

#include#include

#include

#include

#include

#include

#include

#include

#include

#include

#define n 25

#define m 105

#define k 1048576

using

namespace

std;

typedef

long

long

ll;struct

graphe[n*k];

intg[k],b1[m],b2[m],f1[m],f2[m],t[m],dis[k],n,m,cnt;

bool

inq[k];

char

c[n];

queue

q;inline

void addedge(int x,int y,int

w)inline

int spfa(int

u) }}}

return max(0,dis[0

]);}

inline

void

aireen()

for(int i=0;i<(1

for(int j=1;j<=m;++j)

if((i&b1[j])==b1[j]&&!(i&b2[j])&&(i&f1[j]))

addedge(i,i-(i&f1[j])+f2[j]-(i&f2[j]),t[j]);

printf(

"%d\n

",spfa((1

<1

));}

intmain()

網路流24題 軟體補丁問題

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

網路流 24 題 軟體補丁

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

網路流24題 3 軟體補丁問題

網路流 好題。為啥這個題會出現在網路流24題裡呢qaq我真的按照網路流想的建了乙個2 n個點的2 n n邊的圖。然後一想網路流再怎麼跑都跑不出1e6點數1e6邊數的非分層圖吧。棄療看題解md怎麼是狀壓 最短路qaq 就是狀壓狀態然後dp因為1e6的狀態每次轉移又有100所以最短路更新就好了。附 in...