bzoj 4316 小C的獨立集 樹形dp

2021-07-10 23:32:30 字數 717 閱讀 5267

仙人掌樹形dp。

令f[x][0]表示以x為根的子樹中,不選x的最大值;f[x][1]表示選x的最大值。

注意到,同乙個環中的所有點,只有在dfs樹中最高的那個點才會對所在環之外的點的f值造成影響。因此我們在最高的那個點做乙個dp,然後就得到了最高那個點的f,而這個環中的其他點的f就不用管了。

ac**如下:

#include#include#define n 50005

#define m 120005

using namespace std;

int n,m,tot,dfsclk,f[n][2],fa[n],pos[n],low[n],fst[n],pnt[m],nxt[m];

void add(int x,int y)

void solve(int x,int y)

f[x][0]+=now0; now0=0; now1=-1000000000;

for (i=y; i!=x; i=fa[i])

f[x][1]+=now1;

}void dfs(int x)

low[x]=min(low[x],low[y]);

if (low[y]>pos[x])

} for (p=fst[x]; p; p=nxt[p]){

int y=pnt[p];

if (fa[y]!=x && pos[x]

by lych

2016.4.5

BZOJ 4316 小C的獨立集

4316 小c的獨立集 思路 先將樹上的轉移做好。然後環上的轉移就是強制最上面的的點選或者不選,然後在環上跑一遍轉移就可以了。pragma gcc optimize 2 pragma gcc optimize 3 pragma gcc optimize 4 includeusing namespac...

bzoj4316 小C的獨立集

圖論小王子小c經常虐菜,特別是在圖論方面,經常把小d虐得很慘很慘。這不,小c讓小d去求乙個無向圖的最大獨立集,通俗地講就是 在無向圖中選出若干個點,這些點互相沒有邊連線,並使取出的點盡量多。小d雖然圖論很弱,但是也知道無向圖最大獨立集是npc,但是小c很仁慈的給了乙個很有特點的圖 圖中任何一條邊屬於...

BZOJ4316 小C的獨立集(動態規劃)

bzoj 考慮樹的獨立集求法 設 f i 0 1 表示 i 這個點一定不選,以及 i 這個點無所謂的最大值 轉移 f u 0 sum f v 1 f u 1 sum f v 0 f u 1 max f u 1 f u 0 現在放在了仙人掌上,我們可以看做一棵樹加上了若干不相交的返祖邊 於是再加上一維...