日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

P7727 风暴之眼 Eye of the Storm (树形 DP)

發(fā)布時(shí)間:2024/1/18 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 P7727 风暴之眼 Eye of the Storm (树形 DP) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

謹(jǐn) 以 此 文 表 達(dá) 筆 者 個(gè) 人 觀 點(diǎn) , 如 有 冒 犯 官 解 , 可 在 評(píng) 論 區(qū) 訴 說 _{^{_{謹(jǐn)以此文表達(dá)筆者個(gè)人觀點(diǎn),如有冒犯官解,可在評(píng)論區(qū)訴說}}} 謹(jǐn)達(dá)個(gè)點(diǎn)評(píng)區(qū)??

題面

原題

天體風(fēng)暴中的氣象瞬息萬變。

風(fēng)暴中的道路構(gòu)成一棵 n n n 個(gè)結(jié)點(diǎn)的無根樹,第 i i i 個(gè)結(jié)點(diǎn)有初始權(quán)值 w i w_i wi? w i w_i wi? 0 0 0 1 1 1)和類型 t i t_i ti?

結(jié)點(diǎn)的類型分為兩種: AND \texttt{AND} AND 型結(jié)點(diǎn)和 OR \texttt{OR} OR 型結(jié)點(diǎn)。

對(duì)于 AND \texttt{AND} AND 型結(jié)點(diǎn),每一秒結(jié)束后它的權(quán)值將變?yōu)?strong>它與它所有鄰居上一秒權(quán)值的 AND \texttt{AND} AND 和;

對(duì)于 OR \texttt{OR} OR 型結(jié)點(diǎn),每一秒結(jié)束后它的權(quán)值將變?yōu)?strong>它與它所有鄰居上一秒權(quán)值的 OR \texttt{OR} OR 和。

現(xiàn)在,已知從某一時(shí)刻起,所有結(jié)點(diǎn)的權(quán)值都不再發(fā)生任何變化,將此時(shí)點(diǎn) i i i 的權(quán)值稱為 a i a_i ai?

現(xiàn)不知每個(gè)點(diǎn)的初始權(quán)值和類型,只知道最終每個(gè)點(diǎn)的權(quán)值 a i a_i ai?,求出有多少種可能的初始權(quán)值和類型的組合,答案對(duì) 998244353 998244353 998244353 取模。

2 ≤ n ≤ 2 × 1 0 5 , 1000 m s , 256 M B 2\leq n\leq2\times10^5~~,~~1000\,{\tt ms}~~,~~256\,{\tt MB} 2n2×105??,??1000ms??,??256MB .

題解

我們可以發(fā)現(xiàn), A N D \tt AND AND 類型一但接觸到 0,就會(huì)保持 0 永久不變, O R \tt OR OR 類型一旦接觸到 1,就會(huì)保持 1 永久不變。所以,最終的情況,一定是由權(quán)值為 1 的 O R \tt OR OR 、權(quán)值為 0 的 A N D \tt AND AND 、四周全是 1 的 A N D \tt AND AND 和 四周全是 0 的 O R \tt OR OR 組成。

我講的盡量形象一點(diǎn)吧。


我們先看 0 和 1 的交界處,它們比較特別。

這些地方能一直保持這種 “劍拔弩張” 的狀態(tài),想必交界處的兩個(gè)點(diǎn)不簡單。簡單假設(shè)推理一下就會(huì)發(fā)現(xiàn),邊界處的 1 一定是 O R \tt OR OR 形,因?yàn)樗鼈兪?“親 1” 的,能守其 1,義不變 0,如果是 A N D \tt AND AND 形就守不住 1 了,和緊挨著的 0 只用接觸一回合,就永遠(yuǎn)變成 0 了。同理,0 那邊一定是 A N D \tt AND AND 形的 0 了。

我們不妨把這兩種結(jié)點(diǎn)稱之為 “哨兵”,每一個(gè) 1 的連通塊、或者 0 的連通塊邊上(邊上指的是0,1交界處)都必須有哨兵把守。當(dāng)然,這并不代表連通塊內(nèi)部就沒有哨兵了。

類似的,1-連通塊內(nèi)的 A N D \tt AND AND 、0-連通塊內(nèi)的 O R \tt OR OR 這兩種朝三暮四的結(jié)點(diǎn),不妨把它們稱之為 “庶民” 。

一開始,并不一定每個(gè)哨兵都是自己應(yīng)該的權(quán)值(1-連通塊內(nèi)為 1,0-連通塊內(nèi)為 0),它們可能 “未激活”(呈現(xiàn)為敵方的權(quán)值),一個(gè)未激活的哨兵是可以被身邊的 “親和權(quán)值” 給感染、然后激活的,這其中包括身邊的激活的友方哨兵(出于呼喚)或未激活的敵方哨兵(出于警覺)。

但是,庶民的搖擺不定就決定了,任何時(shí)刻,庶民和 “敵對(duì)勢(shì)力” 或者未激活的友方哨兵(畢竟帶有敵方的權(quán)值)中間都必須有激活的哨兵相隔。


這么想,那么最初就可能是這樣:每個(gè)連通塊內(nèi)有若干個(gè)小塊,這些小塊周圍是一圈激活的哨兵,內(nèi)部是哨兵或庶民,連通塊內(nèi)除了這些小塊以外的地方,全是未激活的哨兵。隨著時(shí)間推移,未激活的哨兵漸漸全部激活,最終形成輸入中的模樣。

但對(duì)于每個(gè)連通塊,還有一種情況:一開始就全是未激活的哨兵!庶民不識(shí)抬舉,要他們何用 這種情況,連通塊四周一定得有至少一個(gè)敵方的未激活哨兵相鄰才行,不然會(huì)被圍剿死 不然就全都激活不了了。


好,接下來,就可以著手設(shè)計(jì) DP 了。

同權(quán)值的連通塊一開始是已知的。每個(gè)點(diǎn)最初的狀態(tài)有三種 :未激活的哨兵,激活的哨兵,庶民。分別用 1,2,3 型表示吧,我們?cè)O(shè)計(jì) d p 1 [ i ] dp1[i] dp1[i] d p 2 [ i ] dp2[i] dp2[i] d p 3 [ i ] dp3[i] dp3[i] 表示結(jié)點(diǎn) i i i 先不考慮父親的情況下為 1、2、3 型時(shí), i i i 子樹的方案數(shù)。

但是對(duì)于一開始就全是未激活哨兵的情況不好處理,于是我們就令 d p 1 [ i ] [ 1 ] dp1[i][1] dp1[i][1] 為原先的 d p 1 [ i ] dp1[i] dp1[i] ,令 d p 1 [ i ] [ 0 ] dp1[i][0] dp1[i][0] i i i 結(jié)點(diǎn)所在連通塊(暫不考慮其父親)全是未激活哨兵、并被圍剿死的情況下,子樹的方案數(shù),也就是不合法的方案數(shù)。

這四者初始值都為 1,因?yàn)橐龀朔āW詈? d p 1 [ i ] [ 1 ] dp1[i][1] dp1[i][1] 要減去 d p 1 [ i ] [ 0 ] dp1[i][0] dp1[i][0] ,即減去不合法。

如果掃描到某個(gè)兒子 j j j,與自己在同一個(gè)連通塊內(nèi)( a i = a j a_i=a_j ai?=aj?),那么:

  • d p 1 [ i ] [ 0 ] ← d p 1 [ i ] [ 0 ] ? d p 1 [ j ] [ 0 ] dp1[i][0]\leftarrow dp1[i][0]*dp1[j][0] dp1[i][0]dp1[i][0]?dp1[j][0] ,這個(gè)很明顯,兒子也得被圍剿才行。
  • d p 1 [ i ] [ 1 ] ← d p 1 [ i ] [ 1 ] ? ( d p 1 [ j ] [ 0 ] + d p 1 [ j ] [ 1 ] + d p 2 [ j ] ) dp1[i][1]\leftarrow dp1[i][1]*(dp1[j][0]+dp1[j][1]+dp2[j]) dp1[i][1]dp1[i][1]?(dp1[j][0]+dp1[j][1]+dp2[j]) ,這是還未減去不合法情況下的 d p 1 [ i ] [ 1 ] dp1[i][1] dp1[i][1] ,所以當(dāng)然要兼容并包,同時(shí)未激活的哨兵可以緊挨著激活的哨兵,所以要算上 d p 2 [ j ] dp2[j] dp2[j]
  • d p 2 [ i ] ← d p 2 [ i ] ? ( d p 1 [ j ] [ 0 ] + d p 1 [ j ] [ 1 ] + d p 2 [ j ] + d p 3 [ j ] ) dp2[i]\leftarrow dp2[i]*(dp1[j][0]+dp1[j][1]+dp2[j]+dp3[j]) dp2[i]dp2[i]?(dp1[j][0]+dp1[j][1]+dp2[j]+dp3[j]) ,已經(jīng)激活的哨兵在連通塊內(nèi),說明不符合“全是未激活哨兵” 這種假設(shè)了,兒子認(rèn)為的被圍剿死的方案 ( d p 1 [ j ] [ 0 ] dp1[j][0] dp1[j][0]),到父親這兒又行了。同時(shí),激活的哨兵身邊什么人都可以有,自然就全盤轉(zhuǎn)移過來。
  • d p 3 [ i ] ← d p 3 [ i ] ? ( d p 2 [ j ] + d p 3 [ j ] ) dp3[i]\leftarrow dp3[i]*(dp2[j]+dp3[j]) dp3[i]dp3[i]?(dp2[j]+dp3[j]) ,庶民身邊只能是庶民或激活的哨兵,這個(gè)不必細(xì)說。

如果掃描到某個(gè)兒子 j j j 與自己在不同連通塊的話( a i =? a j a_i\not=a_j ai??=aj?):

  • d p 1 [ i ] [ 0 ] ← d p 1 [ i ] [ 0 ] ? d p 2 [ j ] dp1[i][0]\leftarrow dp1[i][0]*dp2[j] dp1[i][0]dp1[i][0]?dp2[j] ,既然被對(duì)方圍剿,那就是和激活的敵方哨兵相鄰了。
  • d p 1 [ i ] [ 1 ] ← d p 1 [ i ] [ 1 ] ? ( d p 1 [ j ] [ 0 ] + d p 1 [ j ] [ 1 ] + d p 2 [ j ] ) dp1[i][1]\leftarrow dp1[i][1]*(dp1[j][0]+dp1[j][1]+dp2[j]) dp1[i][1]dp1[i][1]?(dp1[j][0]+dp1[j][1]+dp2[j]) ,對(duì)方可以是激活或未激活的哨兵,這個(gè)不用說。主要是 d p 1 [ j ] [ 0 ] dp1[j][0] dp1[j][0] ,由于父親是未激活的哨兵,兒子認(rèn)為的被圍剿死的方案,因父親放了生路,又行了。
  • d p 2 [ i ] ← d p 2 [ i ] ? ( d p 1 [ j ] [ 1 ] + d p 2 [ j ] ) dp2[i]\leftarrow dp2[i]*(dp1[j][1]+dp2[j]) dp2[i]dp2[i]?(dp1[j][1]+dp2[j]) ,激活的哨兵,兒子被圍剿就是被圍剿,和上面相比,不能轉(zhuǎn)移過來。
  • d p 3 [ i ] ← 0 dp3[i]\leftarrow 0 dp3[i]0 ,庶民怎么能跑到邊境呢?直接清零。

最后再來一個(gè) d p 1 [ i ] [ 1 ] ← ( d p 1 [ i ] [ 1 ] ? d p 1 [ i ] [ 0 ] ) dp1[i][1]\leftarrow (dp1[i][1]-dp1[i][0]) dp1[i][1](dp1[i][1]?dp1[i][0])

至此,轉(zhuǎn)移就理清了,最終答案是 d p 1 [ R o o t ] [ 1 ] + d p 2 [ R o o t ] + d p 3 [ R o o t ] dp1[Root][1]+dp2[Root]+dp3[Root] dp1[Root][1]+dp2[Root]+dp3[Root]。時(shí)間復(fù)雜度 O ( n ) O(n) O(n)

CODE

精煉的代碼

#include<map> #include<set> #include<stack> #include<queue> #include<cmath> #include<vector> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; #define MAXN 200005 #define ENDL putchar('\n') #define LL long long #define DB double #define lowbit(x) ((-x) & (x)) LL read() {LL f = 1,x = 0;char s = getchar();while(s < '0' || s > '9') {if(s=='-')f = -f;s = getchar();}while(s >= '0' && s <= '9') {x=x*10+(s-'0');s = getchar();}return f * x; } const int MOD = 998244353; int n,m,i,j,s,o,k; vector<int> g[MAXN]; int inv[MAXN]; int a[MAXN]; int dp1[MAXN][2],dp2[MAXN],dp3[MAXN]; // 1,2,3 void dfs(int x,int ff) {dp1[x][0] = dp2[x] = dp3[x] = 1;dp1[x][1] = 1;for(int i = 0;i < (int)g[x].size();i ++) {int y = g[x][i];if(y != ff) {dfs(y,x);if(a[y] == a[x]) { dp1[x][1] = (0ll+dp1[y][0] + dp1[y][1] + dp2[y]) % MOD *1ll* dp1[x][1] % MOD;dp1[x][0] = dp1[y][0] *1ll* dp1[x][0] % MOD;dp2[x] = (0ll+dp1[y][0]+dp1[y][1] + dp3[y] + dp2[y]) % MOD *1ll* dp2[x] % MOD;dp3[x] = (dp2[y] + dp3[y]) % MOD *1ll* dp3[x] % MOD;}else {dp1[x][1] = (0ll+dp1[y][1] + dp1[y][0] + dp2[y]) % MOD *1ll* dp1[x][1] % MOD;dp1[x][0] = (dp2[y]) % MOD *1ll* dp1[x][0] % MOD;dp2[x] = (dp1[y][1] + dp2[y]) % MOD *1ll* dp2[x] % MOD;dp3[x] = 0;}}}(dp1[x][1] += MOD-dp1[x][0]) %= MOD;return ; } int main() {n = read();for(int i = 1;i <= n;i ++) {a[i] = read();}inv[0] = inv[1] = 1;for(int i = 2;i <= n;i ++) {inv[i] = (MOD-inv[MOD % i]) *1ll* (MOD/i) % MOD;}for(int i = 1;i < n;i ++) {s = read();o = read();g[s].push_back(o);g[o].push_back(s);}dfs(1,0);int ans = (0ll+dp1[1][1]+dp2[1]+dp3[1]) % MOD;printf("%d\n",ans);return 0; }

總結(jié)

以上是生活随笔為你收集整理的P7727 风暴之眼 Eye of the Storm (树形 DP)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 美日韩丰满少妇在线观看 | 大帝av | 国产无遮挡又黄又爽 | h片网站在线观看 | 日本免费高清一区二区 | 国产精品怡红院 | 免费动漫av | 国产精品乱码一区二区三区 | 女生的胸无遮挡 | 超碰女| 精品98| 中文字幕人妻熟女在线 | 亚洲三级视频在线观看 | 永久免费汤不热视频 | 人妻无码一区二区三区久久99 | 天堂一区二区三区 | 在线观看免费av网站 | 国产一区毛片 | 影音先锋国产 | 国产高清自拍av | 开心激情网五月天 | 免费视频亚洲 | 美女调教视频 | 久久久久久久久久久久国产 | 色无极亚洲影院 | 国产精品无码一区二区三区在线看 | 亚洲免费视频观看 | 亚洲一区二区色 | 亚洲视频手机在线观看 | 青青草偷拍视频 | 色婷婷亚洲综合 | 精品一区二区中文字幕 | 丰满少妇一级片 | 伊人网av在线 | 激情噜噜 | 欧美一区二区三区成人久久片 | 亚洲91视频| 国产精品嫩草影院av蜜臀 | 日本少妇一区二区三区 | 国产浮力第一页 | 人成网站在线观看 | 精品女厕偷拍一区二区 | 亚洲国产精品一区 | 捆绑调教sm束缚网站 | 久久精品8| 国产精品国产三级国产专区52 | 午夜激情免费 | 午夜试看120秒| xfplay5566色资源网站 | 日本一本不卡 | 欧美日韩视频在线 | 青青草官网 | 黄色一级大片在线免费看产 | 激情小说亚洲色图 | 精精国产| 午夜性福利视频 | 草逼导航| 福利在线一区二区 | 一区www| 欧美日韩在线视频一区二区 | 777精品久无码人妻蜜桃 | 99热3| 操你啦免费视频 | 三级欧美日韩 | 国产在线看| 中文在线观看高清视频 | 欧美人与性动交α欧美片 | 欧美热热 | 日韩美女做爰高潮免费 | 久久99精品久久久久久琪琪 | 成人毛片在线免费观看 | 日韩久久精品视频 | 久久国内精品 | 亚洲精品一区二区潘金莲 | 特黄级| av天堂一区二区 | 激情六月丁香 | chien国产乱露脸对白 | 毛片无码免费无码播放 | www.色人阁.com | 精品爆乳一区二区三区 | 亚洲精品韩国 | 欧美精品日韩在线观看 | 天海翼av在线播放 | 97se.com| 琪琪在线视频 | 久久这里只有精品9 | 亚洲视频五区 | 不卡av片 | 五月婷婷六月婷婷 | 久久66热这里只有精品 | 一女双乳被两男吸视频 | 久久精品夜色噜噜亚洲a∨ 中文字幕av网 | 中文字幕乱码人妻一区二区三区 | 亚洲永久精品一区二区 | 亚洲精品久久久久avwww潮水 | 久久婷婷激情 | 伊人五月婷婷 | 久久艹国产精品 |