BZOJ5314 JSOI2018 潛入行動

2022-08-19 16:48:08 字數 2292 閱讀 4240

有一說一,這題在洛谷上能評到黑題??

但是其實還可以了,鍛鍊細節能力和分析能力吧

題目大意:

有n個點,有k個監視器,每個點至多放乙個,被放在點上的監視器可以監控到與他相連的所有點但不包括他自己,求覆蓋到整棵樹並且用完k個監視器的方案數

狀態應該挺好想的:

設\(dp[i][j][0/1][0/1]\)表示在根為\(i\)的子樹中放了\(j\)個監視器,\(i\)是否放了,\(i\)是否被監視到,0表示沒有。

然後是比較麻煩和細節的轉移

注意:先把\(dp[i]\)拷貝出來並清空,然後再dp

講下轉移的過程

對於樹u,列舉兒子v,在v之前放了多少個監視器j,在v中放了多少個監視器t

則由\(dp[u][j]×dp[v][t]\)就可以轉移到\(dp[u][j+t]\)

具體一些:

(f為拷貝出來的dp[u])

第一種情況:u上不放,u不被監視到

\[dp[u][j+t][0][0]+=f[j][0][0]×dp[v][j][0][1]

\]分析:v之前u必須也不放,不被監視到,v上不能放,但是要保證u的子樹都要被監視到,所以v的第四維為1,根據乘法原理計數即可

第二種情況:u上放,u不被監視到

分析:在v之前u上放了,由於u上放了,所以會讓v一定被監視到,所以\(dp[v][t][0]\)的第四維取0/1均可(因為在這之後v始終會被u監視)

\[dp[u][j+t][1][0]+=f[u][j][1][0]×(dp[v][t][0][0]+dp[v][t][0][1])

\]第三種情況:u上不放,u被監視到了

分析:由於u不放所以v必須已經被監視到

然後兩種子情況:

1、在v之前u已經被監視,此時v上放不放監視器都不影響,所以都取

\[dp[u][j+t][0][1]+=f[j][0][1]×(dp[v][t][0][1]+dp[v][t][1][1])

\]2、在v之前u未被監視到,由於v上放了監視器所以u被監視到了

\[dp[u][j+t][0][1]+=f[j][0][0]×dp[v][t][1][1]

\]都加起來就行

第四種情況:u上放了,u被監視到

分析:因為u上放了,所以v被不被監視到都可以取,因為v在這之後會被u監視到

依然是兩種子情況:

1、在v之前u已經被監視到了:此時v上放不放監視器都行

(那就是v上放不放監視器,v被不被監視到都行,共4種

\[dp[u][j+t][1][1]+=f[j][1][1]×(dp[v][t][0][0]+dp[v][t][0][1]+dp[v][t][1][0]+dp[v][t][1][1])

\]2、在v之前u尚未被監視到:此時v上必須放監視器

\[dp[u][j+t][1][1]+=f[j][1][0]×(dp[v][t][1][0]+dp[v][t][1][1])

\]作為個強迫症,我把第乙個dp中\(f[j][1][1]×(dp[v][t][1][0]+dp[v][t][1][1])\)的部分也放在下面來了(解釋下**和分析的不一樣之處

最後輸出答案的時候,要把\(dp[1][k][0][1]\)和\(dp[1][k][1][1]\)加起來,因為1節點放不放都行,只要監視到即可。

#include#define rep(i,x,y) for (int i=x;i<=y;i++)

#define res(i,x,y) for (int i=x;i>=y;i--)

using namespace std;

typedef long long ll;

const int maxn=100010,mod=1000000007;

int n,k;

struct edgeedge[maxn<<1];

int cnt=0,head[maxn];

int dp[maxn][105][2][2];

int siz[maxn];

inline void addedge(int u,int v);head[u]=cnt;

}void add(int &x,int y)

int f[105][2][2];

void dfs(int u,int fa)

siz[u]+=siz[v];

}}int read()

int main()

dfs(1,0);

add(dp[1][k][0][1],dp[1][k][1][1]);

printf("%lld\n",dp[1][k][0][1]);

return 0;

}

bzoj 5314 Jsoi2018 潛入行動

description 外星人又雙叒叕要攻打地球了,外星母艦已經向地球航行!這一次,jyy已經聯絡好了 艦隊,打算聯合所有jso ier抵禦外星人的進攻。在 艦隊就位之前,jyy打算事先了解外星人的進攻計畫。現在,攜帶了監聽裝置的 已經秘密潛入了外星人的母艦,準備對外星人的通訊實施監聽。外星人的母艦...

小店購物 JSOI2008 BZOJ 2260

grant是乙個個體戶老闆,他經營的小店因為其豐富的優惠方案深受附近居民的青睞,生意紅火。小店的優惠方案十分簡單有趣。grant規定 在一次消費過程中,如果您在本店購買了精製油的話,您購買香皂時就可以享受2.00元 塊的 如果您在本店購買了香皂的話,您購買可樂時就可以享受1.50元 聽的 諸如此類的...

BZOJ 4327 JSOI2012 玄武密碼

字尾自動機裸題。藉著這道裸題總結一下字尾自動機的查詢問題。1.查字首 查詢時不跳parent,遇到空節點就跳出。2.查子串 查詢時跳parent,記錄最大ans.3.查次數 lct維護right陣列 4.查不同的串的數目 在建樹時維護,乙個點對答案的貢獻為this max len this pare...