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

2022-03-20 05:54:07 字數 1817 閱讀 9730

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])\)

現在放在了仙人掌上,

我們可以看做一棵樹加上了若干不相交的返祖邊

於是再加上一維\(f[u][0/1][0/1]\)

其中最後一維表示這條邊所在的環的最底端的那個點一定不選,或者無所謂

賦初值:\(f[u][1][1]=1\),如果這個點不是所在環的最底端,\(f[u][1][0]=1\)

此時的轉移:

1.兩個點的底端點相同

這個時候我們先只考慮強制不選底端的轉移

那麼,\(f[u][1][0]+=f[v][1][1],f[u][1][1]+=f[v][1][0]\)

也就是上面裸的在樹上的轉移

2.兩個點的底端點不同

既然跨越了環,意味著\(u\)就是這個環的底端點,\(v\)是它所在環的頂端點

那麼,可以\(u\)選\(v\)不選,因為跨越了環,所以對於\(v\)的底端點選擇與否我們是不關心的

而第二維的\(1\)表示的\(u\)無所謂,後面的\(0\)則是強制不選擇\(u\)

因此\(f[u][0][0]+=f[v][1][1]\),\(f[u][1][0]+=f[v][0][0]\)

3.\(v\)的頂端點不是\(u\)

意味著不用擔心底端點產生的影響

所以\(f[u][0][1]+=f[v][1][1]\),\(f[u][1][1]+=f[v][0][1]\)

4.\(v\)的頂端點是\(u\)

此時要考慮底端點的貢獻了

此時當前\(u\)不選,那就沒有什麼問題\(f[u][0][1]+=f[v][1][1]\)

當前\(u\)選擇,強制不能選擇底端點\(f[u][1][1]+=f[v][0][0]\)

好了,這樣就討論完了四種轉移,然後就可以啦

#include#include#include#include#include#include#include#include#include#includeusing namespace std;

#define ll long long

#define rg register

#define max 55555

inline int read()

struct linee[max*3];

int h[max],cnt=1,n,m;

inline void add(int u,int v);h[u]=cnt++;}

int dep[max],fa[max];

int tp[max],un[max];

void dfs(int u,int ff)

void jump(int u,int v)

int f0[max],f1[max],g0[max],g1[max];

void dp(int u)

f1[u]=max(f1[u],f0[u]);

g1[u]=max(g1[u],g0[u]);

}int main()

dfs(1,0);

for(int u=1;u<=n;++u)

for(int i=h[u];i;i=e[i].next)

if(dep[u]jump(u,e[i].v);

dp(1);

printf("%d\n",f1[1]);

return 0;

}

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很仁慈的給了乙個很有特點的圖 圖中任何一條邊屬於...

bzoj 4316 小C的獨立集 樹形dp

仙人掌樹形dp。令f x 0 表示以x為根的子樹中,不選x的最大值 f x 1 表示選x的最大值。注意到,同乙個環中的所有點,只有在dfs樹中最高的那個點才會對所在環之外的點的f值造成影響。因此我們在最高的那個點做乙個dp,然後就得到了最高那個點的f,而這個環中的其他點的f就不用管了。ac 如下 i...