解:首先minmax容斥變成經過集合t的第乙個點就停止的期望步數。對於某個t,設從x開始的期望步數為f(x)
如果x∈t,f(x) = 0。否則f(x) = ∑f(y) / in[x] + 1
樹上高斯消元。從葉子往上,可以發現每個點都可以表示為af(fa) + b
於是我們推一波式子,參考,就可以對每個t,o(n)求出f(root)。
然後每個詢問就列舉子集。
注意dfs的時候可以剪枝,遇到x∈t就返回,否則t飛.....
1 #include 2ac**3const
int n = 30, mo = 998244353;4
5 inline void read(int &x)
13return;14
}1516struct
edge edge[n << 1]; int
tp;19
20int n, rt, e[n], a[n], b[n], now, in[n], ans[1
<< 19], cnt[1
<< 19], ans2[1
<< 19
];21
22 inline int qpow(int a, int
b) 30
return
ans;31}
3233 inline void add(int x, int
y) 40
41void dfs(int x, int
f) 46
int sa = 0, sb = 0;47
for(int i = e[x]; i; i =edge[i].nex)
5455 a[x] = qpow(in[x] - sa, mo - 2
);56 b[x] = 1ll * a[x] * (in[x] + sb) %mo;
5758
return;59
}6061int
main()
6970
int lm = 1
<
71/*
for(now = 1; now < lm; now++)
*/76 memset(ans, -1, sizeof
(ans));
77 memset(ans2, -1, sizeof
(ans2));
7879
for(register int i = 1; i < lm; i++)
8283
///prework over
84for(register int i = 1, k; i <= q; i++)
91int ans = 0;92
if(ans2[s] != -1
) 95
else
102if(cnt[t] & 1) ans = (ans + ans[t]) %mo;
103else ans = (ans - ans[t] + mo) %mo;
104}
105 ans2[s] =ans;
106}
107 printf("
%d\n
", (ans + mo) %mo);
108}
109110
return0;
111 }
LOJ2542 PKUWC2018 隨機遊走
分析 sum limits 1 min sum limits na i sum limits 1 j binom sum limits 1 min sum limits na i n i 0 sum limits 1 min a n max 設 f 表示 f 第一次走到 s 狀態的期望步數。這個東西...
初識隨機遊走
隨機遊走 random walk 又稱隨機游動或隨機漫步。在我們生活中處處都存在著與random walk有關的自然現象,例如氣體分子的運動,滴入水中的墨水,氣味的擴散等 如圖1.4 random walk是擴散過程的基礎,因此它被廣泛地用於對物理和化學等擴散現象的模擬上。此外,random wal...
064 隨機遊走
隨機遊走模擬 模擬醉漢隨機遊走,醉漢的起點在 25 25 並且在周圍徘徊 include irvine32.inc walkmax 50startx 25starty 25 定義結構體 drunkardwalk struct path coord walkmax dup 0,0 pathsused ...