BZOJ 4316 小C的獨立集

2022-03-05 02:08:00 字數 1258 閱讀 6541

4316: 小c的獨立集

思路:先將樹上的轉移做好。然後環上的轉移就是強制最上面的的點選或者不選,然後在環上跑一遍轉移就可以了。

**:

#pragma gcc optimize(2)

#pragma gcc optimize(3)

#pragma gcc optimize(4)

#includeusing namespace std;

#define y1 y11

#define fi first

#define se second

#define pi acos(-1.0)

#define ll long long

//#define mp make_pair

#define pb push_back

#define ls rt<<1, l, m

#define rs rt<<1|1, m+1, r

#define ull unsigned ll

#define pll pair#define pli pair#define pii pair#define piii pair#define pdd pair#define mem(a, b) memset(a, b, sizeof(a))

#define debug(x) cerr << #x << " = " << x << "\n";

#define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);

//head

const int n = 6e4 + 10;

vectorg[n];

int n, m, u, v, dp[n][2], fa[n];

int low[n], dfn[n], cnt = 0;

inline void dp(int u, int v)

dp[u][0] += now0;

now0 = 0, now1 = -10000000;

for (int i = v; i != u; i = fa[i])

dp[u][1] += now1;

}inline void tarjan(int u, int o)

else low[u] = min(low[u], dfn[v]);

if(low[v] > dfn[u])

}for (int i = 0; i < g[u].size(); ++i)

}}int main()

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...

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 現在放在了仙人掌上,我們可以看做一棵樹加上了若干不相交的返祖邊 於是再加上一維...