NOIP2018 保衛王國(動態DP)

2021-09-29 04:38:32 字數 2405 閱讀 3127

求最小權值點覆蓋。

m

mm次詢問,每次給出兩個點,分別要求每個點必須選或必須不選,輸出每次的最小權值覆蓋或者無解輸出−1-1

−1強制選或者不選可以看做修改權值為±

∞\pm\infin

±∞。那麼就是這道板題了。

#include

using

namespace std;

typedef

long

long ll;

template

<

class

t>

inline

void

read

(t &x)

const

int maxn =

100005

;const ll inf =

1e10

;int n, m, fir[maxn]

, nxt[maxn<<1]

, to[maxn<<1]

, cnt; ll v[maxn]

;inline

void

link

(int u,

int v)

int tmr, fa[maxn]

, dfn[maxn]

, tp[maxn]

, bt[maxn]

, son[maxn]

, sz[maxn]

, seq[maxn]

;struct mat

mat operator*(

const mat &o)

const

}t[maxn<<2]

, val[maxn]

;void

dfs1

(int u,

int ff)

}ll f[maxn][2

];void

dfs2

(int u,

int top)

voiddp(

int u)

void

build

(int i,

int l,

int r),}

};return;}

int mid =

(l + r)

>>1;

build

(i<<

1, l, mid)

;build

(i<<1|

1, mid+

1, r)

; t[i]

= t[i<<1]

* t[i<<1|

1];}

void

update

(int i,

int l,

int r,

int x)

int mid =

(l + r)

>>1;

if(x <= mid)

update

(i<<

1, l, mid, x)

;else

update

(i<<1|

1, mid+

1, r, x)

; t[i]

= t[i<<1]

* t[i<<1|

1];}

mat query

(int i,

int l,

int r,

int x,

int y)

void

modify

(int u, ll w)

}mapint,

int>

,bool

>e;

char s[10]

;int main (

) ll sum =0;

ll tmpa = v[a]

;modify

(a, v[a]

+(x ?

-inf : inf)

); sum +

=(x ?

-inf :0)

; ll tmpb = v[b]

;modify

(b, v[b]

+(y ?

-inf : inf)

); sum +

=(y ?

-inf :0)

; mat ans =

query(1

,1, n,

1, dfn[bt[1]

]);printf

("%lld\n"

,min

(ans[0]

[0], ans[1]

[0])

-sum)

;modify

(a, tmpa)

,modify

(b, tmpb);}

}

NOIP2018 保衛王國

題目 強制選點我們可以把那個點權搞成 inf 強制不選我們搞成 inf 之後就真的成為動態 dp 的板子題了 由於不想像板子那樣再寫乙個最大獨立集的方程,之後利用最小點覆蓋 總點權 最大獨立集的做法,而直接寫了乙個最小點覆蓋的方程,所以寫出了很多鍋 矩陣裡存放相同意義變數的位置可能真實值不相等,於是...

NOIP2018 保衛王國

給定一棵樹,求它的最小點權覆蓋集,其中允許強制某個點選或不選 ddp用lct維護 明確乙個關係式 最小點權覆蓋集 全集 最大點權獨立集 那麼n 2000的暴力就很簡單了,暴力修改,然後求最大點權獨立集就好了 我在考場上就是這麼寫的 關於正解,我採用的是動態dp 動態dp的題解點這裡 根據上面的式子,...

NOIP2018 保衛王國 動態DP

給出一棵樹,有m組詢問,每次詢問給出兩個點,規定他們必須選或必須不選。求樹的最小權覆蓋集。此題有倍增 樹形dp的做法,常數非常優秀,但思路比較難想到。顯然最小權覆蓋集 總點權和 最大權獨立集 看到最大權獨立集,我們想到板子題 luogup4719 模板 動態dp.考慮如何處理詢問。由於我們要權值最小...