洛谷P6016 出遊

2022-06-14 03:42:08 字數 1270 閱讀 7469

學校組織了一次暑期出遊活動,報名將在第 \(t\) 天截止。

一共有 \(n\) 位同學,第 \(i\) 位同學有 \(a_i\) 位朋友。朋友關係是單向的,換句話說,小 z 有乙個朋友是小 y,並不意味著小 y 一定也有乙個朋友是小 z。另外,自己也可能是自己的朋友。

第 \(0\) 天時,每位同學會決定自己是否參加活動。第 \(i\) 位同學有 \(p_i\) 的概率決定參加,\(1-p_i\) 的概率決定不參加。

接下來的 \(t\) 天裡,每位同學會重新決定自己是否參加活動。第 \(i\) 位同學這一天決定參加活動,當且僅當至少有乙個他的朋友在前一天決定參加,否則便不參加。

你需要求出參加活動的同學人數期望,答案對 \(998244353\) 取模。

我們設\(f[k][i][j]\)表示在第\(k\)天,同學\(i\)的選擇是否會影響到同學\(j\)的選擇。那麼明顯有轉移

\[f[k][i][j]=(f[k-1][i][1]\texttt f[k-1][1][j])\texttt(f[k-1][i][n]\texttt f[k-1][n][j])

\]時間複雜度\(o(tn^3)\),矩陣乘法優化後\(o(n^3\log t)\)。

由於上述轉移包含位運算,所以我們可以用\(bitset\)優化,如下

struct matrix

};

這樣的話時間複雜度就降到了\(o(\frac)\),可以過掉本題。

我們處理出\(t\)步之後的貢獻後,得到乙個矩陣\(f\)。再列舉兩個點\(i,j\),如果\(f.a[j][i]=1\),那麼\(j\)就對\(i\)在\(t\)天之後有貢獻。

那麼如何計算\(t\)天後乙個人去的期望呢?

顯然有\[1-q[i]=\pi_(1-p[i])

\]那麼直接在\(\mod\ 998244353\)的意義下計算答案即可。

#include #include #include #include using namespace std;

const int n=510,mod=998244353;

int n,m,ans,p[n];

struct matrix

}a,f;

int main()

} for (;m;m>>=1,a=a*a)

if (m&1) f=f*a;

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

printf("%d",(ans%mod+mod)%mod);

return 0;

}

洛谷P5603 小C與桌遊

題目鏈結 小c是乙個熱愛桌遊的高中生,現在他被乙個桌遊難住了,快來幫幫他!這個桌遊的地圖可以被抽象成乙個 n 個點,m 條邊的有向無環圖 不保證連通 小c在這個地圖上行走,小c能走到某個點當且僅當能夠到達這個點的所有點都已經被小c走到。小c會走到每個點恰好 1 次,並且他能走到哪些點與他當前所在的點...

洛谷P1005 NOIP2007 矩陣取數遊戲

抄的高精度模板233 由於要取完所有的數,所以原題可轉化為在每一行上取數,累加所有行的答案即可 f k i j 表示在第k行從1取到i,從j取到m的答案 f k i j max f k i 1 j 2 m j i 1 a k i 1 f k i j 1 2 m j i 1 a k j 1 第一次寫把...

洛谷P1640 SCOI2010 連續攻擊遊戲

lxhgww最近迷上了一款遊戲,在遊戲裡,他擁有很多的裝備,每種裝備都有2個屬性,這些屬性的值用 1,10000 之間的數表示。當他使用某種裝備時,他只能使用該裝備的某乙個屬性。並且每種裝備最多只能使用一次。遊戲進行到最後,lxhgww遇到了終極boss,這個終極boss很奇怪,攻擊他的裝備所使用的...