BZOJ2759 乙個動態樹好題 LCT

2022-05-31 05:24:15 字數 2591 閱讀 6917

題解:

的確是動態樹好題

首先由於每個點只有乙個出邊

這個圖構成了基環內向樹

我們觀察那個同餘方程組

一旦形成環的話我們就能知道環上點以及能連向環上點的值是多少了

所以我們只需要用一種結構來維護兩個不是直接相連點的狀態

由於有刪邊連邊操作,比較容易想到lct

我們按照套路將它拆掉一條邊形成一顆樹

因為我們現在只知道環上某一點的值,所以我們這棵樹應該是不隨便換根的

每次詢問只需要把當前這個點access再splay一下 查詢用根怎麼表示就可以了

修改方程組等價於刪一條邊,連一條邊

刪的邊如果不在環上 直接刪

#include using

namespace

std;

#define rint register int

#define il inline

#define rep(i,h,t) for(int i=h;i<=t;i++)

#define dep(i,t,h) for(int i=t;i>=h;i--)

#define ll long long

#define me(x) memset(x,0,sizeof(x))

#define mep(x,y) memcpy(x,y,sizeof(y))

#define mid ((h+t)>>1)

namespace

io template

void read(t &x)

template

void read2(t &x)

char sr[1

<<24],z[20]; ll z,c1=-1

; template

void

wer(t x)

il void

wer1()

il void

wer2()

template

il void maxa(t &x,t y)

template

il void mina(t &x,t y)

template

il t max(t x,t y)

template

il t min(t x,t y)

};const

int n=5e4;

intk[n],p[n],b[n];

const

int mo=10007

;struct

re};

il int fsp(int x,int

y)

return

now;

}struct

lct il

bool pd(int

x)

void rotate(int x,int

y)

else

fa[x]=fa[f1];

if(pd(f1))

if (y==1) ls[x]=f1; else rs[x]=f1;

fa[f1]=x;

updata(f1); updata(x);

}void splay(int

x)

else

if (ls[fa[f1]]==f1)

if (ls[f1]==x) rotate(f1,2),rotate(x,2

);

else rotate(x,1),rotate(x,2

);

else

if (rs[f1]==x) rotate(f1,1),rotate(x,1

);

else rotate(x,2),rotate(x,1

); f1=fa[x];}}

void access(int

x)

}int fdr(int

x)

int query(int

x)

il void cut(int

x)

void change(int x,int k,int p,int

b)

else

} else

else

if (fdr(p)!=x)

else

}v[x]=(re); splay(x);

}il

void link(int x,int

y)

else sp[x]=y;

}}s;int

main()

; s.link(i,p[i]);

}intq;

io::read(q);

rep(i,

1,q)

else

}fwrite(io::sr,

1,io::c1+1

,stdout);

return0;

}

刪的邊如果在環上 並且沒有連上 把標記清除

刪的邊如果在環上 並且連上了 把這條邊段刪了,然後把標記邊連上

Bzoj 2759 乙個動態樹好題

有n個未知數x 1.n 和n個等式組成的同餘方程組 x i k i x p i b i mod 10007 其中,k i b i x i 0,10007 z 你要應付q個事務,每個是兩種情況之一 一.詢問當前x a 的解 a a無解輸出 1 x a 有多解輸出 2 否則輸出x a 二.修改乙個等式 ...

BZOJ2759 乙個動態樹好題 LCT

zhouzhendong 有n個未知數x 1.n 和n個等式組成的同餘方程組 x i k i x p i b i mod 10007 其中,k i b i x i 0,10007 z 你要應付q個事務,每個是兩種情況之一 一.詢問當前x a 的解 a a無解輸出 1 x a 有多解輸出 2 否則輸出...

BZOJ 2759 一道動態樹的好題

一道好題的標準 從常規的知識點中敲擊出新火花,但並不是偏題。不卡常,不卡溢位 首先看乙個弱化的問題,乙個固定的 n 元 n項模方程怎麼求解每個變數。高斯消元?太慢啦!如果我們把x px連邊,我們可以得到乙個基環森林。對於每個聯通塊,找到環並求出環中某乙個變數的值,顯然當乙個變數的值求出來了,整個聯通...