考慮一次修改中,每個節點的狀態
(sooke的圖)
dfs中經過的點(白)
dfs的終點(黑)
白色的點的非黑白兒子(橙)
黑節點子樹中的點(灰)
橙節點子樹中的點(黃)
設\(f(i,u)\)表示第\(i\)次修改後\(u\)節點在多少個線段樹中的tag=1
首先對於所有點,在沒有被修改的線段樹中tag資訊不會變化,接下來只考慮修改後的情況.
對於1類點,它的tag一定為0
對於2類點,它的tag一定為1
對於3類點,它的tag是否為1取決於它到根的路徑上是否有節點的tag=1.
所有我們需要額外維護乙個資訊,設\(g(i,u)\)表示第\(i\)次修改後在多少個線段樹中\(u\)到根的路徑上的節點的tag都為0
(敗者食塵)
對於1類點,它的tag一定為0,它到根的路徑上的tag都為0
g[u]+=power(2,i-1);
對於2類點,它的tag一定為1
f[u]+=power(2,i-1);
對於3類點,它的tag是否為1取決於它到根的路徑上是否有節點的tag=1
f[u]+=(power(2,i-1)-g[u]);
g[u]+=g[u];
對於4類點,它的tag不會變化,它到根的路徑上一定有乙個2類點tag=1
f[u]+=f[u]
對於5類點,它的tag不會變化,它到根的路徑上是否有節點tag=1的情況不會變化
f[u]+=f[u];
g[u]+=g[u];
1,2,3類點的數量為\(o(\log n)\),可以在dfs過程中維護
4,5類點相當於將子樹內的值全部乘2,可以用lazy標記維護
額外維護\(sf(u)\)表示\(u\)子樹中\(f\)的和.詢問答案為\(sf(1)\)
#include #include #define debug(...) fprintf(stderr,__va_args__)
#define lson u<<1,l,mid
#define rson u<<1|1,mid+1,r
using namespace std;
inline char gc()
templatevoid rd(t &x)
while(ch>='0'&&ch<='9')
x*=f;
}typedef long long ll;
const int mod=998244353;
const int maxn=1e5+50,maxm=1e5+50;
int n,m;
int cnt;
int pow2[maxm];
inline int add(int x)
inline int sub(int x)
namespace seg
inline void changef(int u,int d)
inline void pushdown(int u)
if(tagg[u]!=1)
} inline void pushup(int u)
inline void change5(int u)
inline void change4(int u)
inline void change3(int u)
inline void change2(int u)
inline void change1(int u)
void build(int u,int l,int r)
int mid=(l+r)>>1;
build(lson);
build(rson);
pushup(u);
} void update(int u,int l,int r,int ql,int qr)
int mid=(l+r)>>1;
change1(u);
pushdown(u);
if(qr<=mid)
else if(ql>mid)
else
pushup(u); }}
void init()
int main()
else
} return 0;
}
洛谷 P5326 ZJOI2019 開關
令 p i dfrac 設 f x 表示在第 k 步到達合法狀態的概率的生成函式,因為只關心第一次到達合法狀態的情況,所以設 g x 表示走 k 步後回到原來的狀態的概率,h x 表示第 k 步第一次走到合法狀態的概率,則有 f x g x h x to h x dfrac 設 h x sum a ...
洛谷 P2607 ZJOI2008 騎士
給出一幅有n個點,n條邊的無向未必聯通圖,每乙個點有乙個權並與另外乙個點相連,對其中一些點進行染色,且相鄰兩點的顏色不能都染,則最大的染色點權值和是多少.這題和 洛谷p1453城市環路 很像,區別就在於它不是連通圖.因而可以先用並查集和vector進行分塊,易證每一塊都是比樹多一條邊的連通圖,每一塊...
洛谷P2610 ZJOI2012 旅遊
到了難得的暑假,為了慶祝小白在數學考試中取得的優異成績,小藍決定帶小白出去旅遊 經過一番抉擇,兩人決定將t國作為他們的目的地。t國的國土可以用乙個凸n邊形來表示,n個頂點表示n個入境 出境口。t國包含n 2個城市,每個城市都是頂點均為n邊形頂點的三角形 換而言之,b 城市組成了關於t國的乙個三角剖分...