傳送門
發現當存在乙個環,就可以求出環所在聯通塊上所有點的答案.
既然題目都告訴我是lct了,就想著搞一搞,
用splay維護每個點對根的方程,即splay維護這顆splay中深度最深的節點對於深度最淺節點的方程
然後腦子木的以為有很多非樹邊,在**各種亂搞,,各種暴力列舉想水一水...
我大概是個智障.
正解:邊是有向的,i->p[i]
有腦子的人都會知道這是一顆基環內向樹
基環樹有個套路就是不需要換根操作,把環上一條邊拆了,其中乙個點看做根,另乙個點看做根的special_father
那麼就很好做了,splay像上面那樣維護.
link的時候如果沒聯通就直接link,否則只是把i的special_father設為p[i]
cut的時候如果是cut掉special_father.直接把special_father設為0
否則先cut成兩個聯通塊,然後找到開始的根,若根的special_father重新聯通這兩個聯通塊就把這條邊變成正常的樹邊,link起來,special_father設為0
查詢的時候,access根的special_father即可算出根的答案,再access要查詢的點即可
1view code//achen
2 #include3 #include4 #include5 #include6 #include7 #include8 #include9 #include
10 #include11
#define for(i,a,b) for(int i=(a);i<=(b);i++)
12#define rep(i,a,b) for(int i=(a);i>=(b);i--)
13const
int n=30000+7,p=10007
;14 typedef long
long
ll;15 typedef double
db;16
using
namespace
std;
17int n,q,inv[p+7
];18
char o[10
];19
20 templatevoid read(t &x)
2627
int ch[n][2
],p[n],sp[n],pp[n];
28#define lc ch[x][0]
29#define rc ch[x][1]
30struct
data
33 data(int k,int
b):k(k),b(b){}
34 friend data operator *(const data&a,const data&b)
37}sum[n],dt[n];
3839
int isroot(int x)
4041
void update(int x)
4243
void rotate(int
x)
5051
void splay(int
x) 57}58
59void access(int
x) 65}66
67int find_root(int
x) 73
74void lik(int x,int
y) 78
splay(x);
79 p[x]=y;80}
8182
void cut(int x,int
y) 86
int z=find_root(x);
87 lc=p[lc]=0
; 88
update(x);
89if(sp[z]&&find_root(sp[z])!=find_root(z)) 95}
9697
void exgcd(int a,int b,int &x,int &y)
99 exgcd(b,a%b,y,x); y-=a/b*x;
100}
101102
void qry(int
x) 110
int a=(1-tp.k+p)%p;
111int rs=!tp.k?tp.b:inv[a]*tp.b%p;
112access(x);
113splay(x);
114 rs=(sum[x].k*rs%p+sum[x].b)%p;
115 printf("
%d\n
",rs);
116}
117}
118119
//#define debug
120int
main()
132read(q);
133while(q--)
140else
150}
151return0;
152 }
我真的好菜呀,,什麼"經典模型","套路","眾所周知的" 都不知道,什麼"大水題","送分題","普及-的題"都做不來...
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 二.修改乙個等式 ...
LCT BZOJ2759 乙個動態樹好題
把 pi 設為 i 的父親,這樣會變成乙個基環森林 可以發現乙個點有解當且僅當這個店所在聯通塊存在環 對於環,可以任取一點作為根,根原本的父親看做一條特殊的邊。那麼用lct可以維護出乙個點與這個點所在聯通塊的根的關係,也就是xi k x rt b 其中 k b是用lct維護出的值。那麼可以根據根與根...
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 否則輸出...