link:
思路link: 題意
給出乙個n個點的dag,起點保證為1,終點保證為n,在每乙個點,每一天有等概率走向其相鄰的點或是停在原點。在第i天的損耗值為i,求走到終點的期望損耗值。
思路定義兩個陣列d[i
],c[
i]
d[i],c[i]
d[i],c
[i]分別代表第i個位置到終點的期望天數以及期望損耗值。
可以這麼理解:第一天的損耗值為1,第二天為2,……,第x天為x。可以等價為第一天為x,第二天為x-1,……,第x天為1。
這樣第i
ii個位置的期望損耗值可以由其指向的點j
jj更新而得,期望損耗值為c[j
]+d[
j]+1
c[j]+d[j]+1
c[j]+d
[j]+
1。可以列出方程:
d [i
]=∑d
[j]x
+1+d
[i]x
+1+1
d[i] = \frac}+\frac+1
d[i]=x
+1∑d
[j]
+x+1
d[i]
+1c[i
]=∑c
[j]+
d[j]
+1x+
1+c[
i]+d
[i]+
1x+1
c[i] =\frac}+\frac
c[i]=x
+1∑c
[j]+
d[j]
+1+
x+1c
[i]+
d[i]
+1解得:
d [i
]=∑d
[j]x
+x+1
xd[i] = \frac}+\frac
d[i]=x
∑d[j
]+x
x+1
c [i
]=∑c
[j]+
d[j]
+1x+
d[i]
+1
xc[i] = \frac}+\frac
c[i]=x
∑c[j
]+d[
j]+1
+xd
[i]+
1期望由於要逆推,所以需要先搞出拓撲序,然後從拓撲序反向更新。
**
//
// created by yjq on 2019/9/4.
//#include
using
namespace std;
#define ll long long
#define ld long double
#define ull unsigned long long
#define __ ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
const
int maxn =
5e5+10;
struct pxy e[maxn *2]
;int head[maxn]
, cnt, id[maxn]
, od[maxn]
;void
ins(
int x,
int y)
int n, m;
ld d[maxn]
, c[maxn]
;queue<
int> q;
vector<
int> v;
intmain()
v.clear()
;for
(int i =
1; i <= n;
++i)
while
(!q.
empty()
)}memset
(d,0
,sizeof d)
;memset
(c,0
,sizeof c)
; d[n]=0
; c[n]=0
;for
(int i =
(int
) v.
size()
-2; i >=0;
--i)
d[x]
= w /
(ld) od[x]
+(ld)
(od[x]+1
)/(ld) od[x];}
for(
int i =
(int
) v.
size()
-2; i >=0;
--i)
c[x]
= w /
(ld) od[x]
+(d[x]
+1.0)/
(ld) od[x];}
cout << fixed <<
setprecision(2
)<< c[1]
<< endl;
}return0;
}
2019icpc南京網路賽 A 主席樹
給乙個 n times n 的螺旋矩陣,給出其中的 m 個點的值分別為各個點上數字的數字之和,給出 q 個詢問,每次詢問從 x1,y1 到 x2,y2 的子矩陣的和。用官方題解的方法 o 1 推出點 x,y 上的值,將這 m 個點按 x 排序後依次按 y 建主席樹,查詢時找到對應的 x1 和 x2 ...
2019ICPC南京網路賽A 離線樹狀陣列
題目鏈結 分析 一次詢問可以分為四次字首詢問,將每次詢問按照y公升序排序,維護乙個x上的樹狀陣列就行了。難點在於計算對應點的值 不會 include using namespace std typedef long long ll const int maxn 1e6 5 ll bit maxn a...
2019 icpc 上海網路賽
題意 t組案例,每組案例 n個燈泡 0 n 1 初始所有燈泡為熄滅狀態,m次操作,每次操作把區間 l,r 內的燈泡翻轉 開變關,關變開 問m次操作之後有多少燈泡是亮著的。題解 每次操作對 l,r 的所有數進行 1操作,求最後有多少個奇數。設該陣列為a n 每次操作a l 1,a r 1 1,求字首和...