国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

|BZOJ 2427|樹形DP|強(qiáng)連通分量|[HAOI2010]軟件安裝

2019-11-11 02:25:24
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

BZOJ傳送門 根據(jù)題目可以構(gòu)造一幅圖,可以得知這個(gè)圖是一些森林和環(huán),我們對(duì)圖縮點(diǎn),建立虛結(jié)點(diǎn),使所有沒(méi)有入度的強(qiáng)連通分量連接虛結(jié)點(diǎn),再進(jìn)行樹上背包即可。

#include<cstdio> #include<algorithm> #include<cstring> #include<vector>#include<stack>#define ms(i,j) memset(i,j, sizeof i);using namespace std;const int MAXN = 100 + 5, MAXM = 500 + 5;int n,m;int wi[MAXN], vi[MAXN];vector<int> G[MAXN];int s_size = 0, s_no[MAXN], s_wi[MAXN], s_vi[MAXN], ino[MAXN];vector<int> RG[MAXN];stack<int> s;int ex[MAXN], sz = 0, dn[MAXN], low[MAXN];void tarjan(int u){ dn[u] = low[u] = ++sz; ex[u] = -1; s.push(u); for (int i=0;i<G[u].size();i++) { int v = G[u][i]; if (!ex[v]) { tarjan(v); low[u] = min(low[u], low[v]); } else if (ex[v]==-1) { low[u] = min(low[u], dn[v]); } } if (low[u]==dn[u]) { s_size++; int e; do { e = s.top(); s.pop(); s_no[e] = s_size; s_wi[s_size] += wi[e]; s_vi[s_size] += vi[e]; ex[e] = 1; } while(e!=u); }}void rebuild(){ ms(ino,0); for (int u=0;u<=n;u++) { for (int j=0;j<G[u].size();j++) { int v = G[u][j]; if (s_no[v]!=s_no[u]) { RG[s_no[u]].push_back(s_no[v]); ino[s_no[v]]++; } } } for (int i=1;i<=s_size;i++) if (!ino[i]&&s_no[0]!=i) RG[s_no[0]].push_back(i);}int f[MAXN][MAXM];void dp(int u){ for (int i=0;i<RG[u].size();i++) { int v = RG[u][i]; if (!ex[v]) { ex[v] = true; dp(v); for (int j=m-s_wi[u];j>=0;j--) for (int k=0;k<=j;k++) f[u][j] = max(f[u][j], f[u][j-k]+f[v][k]); } } for (int j=m;j>=0;j--) { if (j>=s_wi[u]) f[u][j] = f[u][j-s_wi[u]] + s_vi[u]; else f[u][j] = 0; }}int main() { scanf("%d%d", &n,&m); wi[0] = vi[0] = 0; for (int i=1;i<=n;i++) scanf("%d", &wi[i]); for (int i=1;i<=n;i++) scanf("%d", &vi[i]); for (int i=1;i<=n;i++) { int di; scanf("%d", &di); G[di].push_back(i); } ms(ex,0); ms(s_wi,0); ms(s_vi,0); for (int i=0;i<=n;i++) if (!ex[i]) tarjan(i); rebuild(); ms(ex,0); ms(f,0); dp(s_no[0]);
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 渭源县| 岚皋县| 岳普湖县| 瑞丽市| 宾川县| 江北区| 封丘县| 印江| 塔河县| 保定市| 崇仁县| 海口市| 石门县| 高陵县| 策勒县| 游戏| 浑源县| 英吉沙县| 廉江市| 依兰县| 兴隆县| 遂宁市| 孙吴县| 宜城市| 方山县| 揭东县| 博客| 灵石县| 随州市| 湟源县| 包头市| 竹北市| 常山县| 北流市| 乐业县| 涿州市| 那坡县| 漠河县| 潼南县| 长治市| 苍南县|