BZOJ 2427 HAOI2010 軟體安裝

2021-08-21 04:50:12 字數 2586 閱讀 9032

time limit: 10 sec memory limit: 128 mb

submit: 2146 solved: 865

[submit][status][discuss]

description

現在我們的手頭有n個軟體,對於乙個軟體i,它要占用wi的磁碟空間,它的價值為vi。我們希望從中選擇一些軟體安裝到一台磁碟容量為m計算機上,使得這些軟體的價值盡可能大(即vi的和最大)。

但是現在有個問題:軟體之間存在依賴關係,即軟體i只有在安裝了軟體j(包括軟體j的直接或間接依賴)的情況下才能正確工作(軟體i依賴軟體j)。幸運的是,乙個軟體最多依賴另外乙個軟體。如果乙個軟體不能正常工作,那麼它能夠發揮的作用為0。

我們現在知道了軟體之間的依賴關係:軟體i依賴軟體di。現在請你設計出一種方案,安裝價值盡量大的軟體。乙個軟體只能被安裝一次,如果乙個軟體沒有依賴則di=0,這時只要這個軟體安裝了,它就能正常工作。

input

第1行:n, m (0<=n<=100, 0<=m<=500)

第2行:w1, w2, … wi, …, wn (0<=wi<=m )

第3行:v1, v2, …, vi, …, vn (0<=vi<=1000 )

第4行:d1, d2, …, di, …, dn (0<=di<=n, di≠i )

output

乙個整數,代表最大價值。

sample input

3 10

5 5 6

2 3 4

0 1 1

sample output

5比較典型的樹上揹包問題,但是有個細節是圖不一定是聯通的,也就是說可能出現環,

思考環,如果選其中的乙個就必須都選,所以要用tarjan縮點。之後就是乙個樹上揹包問題了,設dp[x][i]為以x為節點的子樹佔了i 的空間的最大收益,

for(register

int j=m;j>=w[x];j--) //x的空間

for(register

int k=0;k<=j-w[x];k++)

while(ch>='0' && ch<='9')

return x*f;

}int n,m,w[maxn],val[maxn],w[maxn],v[maxn];

int head[maxn],cnt;

int dfn[maxn],low[maxn],xx[maxn],head_[maxn],cnt_;

int sta[maxn],top,num;

int col[maxn],col_num,du[maxn];

int dp[maxn][maxn],ans;

bool vis[maxn];

//dp[x][i] 表示以x為節點的子樹,用了i的空間,最大權值

struct edgeedge[maxn<<1],edge_[maxn<<1];

inline

void add(int bg,int ed)

inline

void add_(int bg,int ed)

inline

void tarjan(int x)

else

if(vis[u])

low[x]=min(low[x],dfn[u]);

}if(low[x]==dfn[x])

top--;

col[x]=col_num;

}}inline

void dfs(int x)

}

}int main()

for(register

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

if(!dfn[i]) tarjan(i);

// for(register int i=0;i<=n;i++) coutfor(register

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

for(register

int i=1;i<=col_num;i++)

if(!du[i]) add_(col[0],i);

// for(register int i=1;i<=col_num;i++)

// for(register int i=1;i<=col_num;i++) cout// for(register int i=0;i<=col_num;i++)

// for(register int j=0;j<=m;j++)

// coutprintf("%d",ans);

return0;}

/*3 10

5 5 6

2 3 4

0 1 1

*//*

5 74 2 1 2 3

5 3 50 6 19

0 1 2 2 1

*//*

7 14

5 1 6 6 6 1 1

1 2 1 2 1 5 4

0 1 2 2 1 5 5

*//*

7 23

4 4 4 4 1 4 4

100 100 100 100 1 5 4

4 1 2 3 0 5 5

*/

BZOJ2427 HAOI2010 軟體安裝

bzoj2427 haoi2010 軟體安裝 現在我們的手頭有n個軟體,對於乙個軟體i,它要占用wi的磁碟空間,它的價值為vi。我們希望從中選擇一些軟體安裝到一台磁碟容量為m計算機上,使得這些軟體的價值盡可能大 即vi的和最大 但是現在有個問題 軟體之間存在依賴關係,即軟體i只有在安裝了軟體j 包括...

BZOJ 2427 HAOI2010 軟體安裝

bzoj 2427 haoi2010 軟體安裝 tarjan 樹形dp 題意 現在我們的手頭有n個軟體,對於乙個軟體i,它要占用wi的磁碟空間,它的價值為vi。我們希望從中選擇一些軟體安裝到一台磁碟容量為m計算機上,使得這些軟體的價值盡可能大 即vi的和最大 但是現在有個問題 軟體之間存在依賴關係,...

bzoj2427 軟體安裝

軟體安裝 題目背景 bzoj2427 分析 樹型dp 原圖有環 並且好像有和其他部分不連通的單個環 這個題,顯然應該是一些環和一些樹放到一起,那麼顯然的對於乙個環要麼全部選擇,要麼乙個都不選,那麼我們先 tarjan 縮點一發每乙個 scc的 w為原來所有 w的和,v為原來所有的 v和,然後就成了一...