題解:
的確是動態樹好題
首先由於每個點只有乙個出邊
這個圖構成了基環內向樹
我們觀察那個同餘方程組
一旦形成環的話我們就能知道環上點以及能連向環上點的值是多少了
所以我們只需要用一種結構來維護兩個不是直接相連點的狀態
由於有刪邊連邊操作,比較容易想到lct
我們按照套路將它拆掉一條邊形成一顆樹
因為我們現在只知道環上某一點的值,所以我們這棵樹應該是不隨便換根的
每次詢問只需要把當前這個點access再splay一下 查詢用根怎麼表示就可以了
修改方程組等價於刪一條邊,連一條邊
刪的邊如果不在環上 直接刪
#include usingnamespace
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連邊,我們可以得到乙個基環森林。對於每個聯通塊,找到環並求出環中某乙個變數的值,顯然當乙個變數的值求出來了,整個聯通...