傳送門
大意:給你一棵樹,每次永久修改一條邊權,詢問當前最小生成樹做法真的妙妙的
考慮到無論我們怎麼修改某條邊的邊權
都總有一些邊可以被選到
也總有一些邊不會被選到
因此就引入了兩個操作
c on
trac
tion
:contraction:
contra
ctio
n:我們將當前分治區間的所有要修改的邊全部賦為−in
f-inf
−inf
那麼顯然當前如果在mst
mstms
t中的邊肯定會在mst
mstms
t中那我們就可以把這些邊縮成乙個點來縮小圖的規模
r ed
ucti
on
reduction
reduct
ion
同理將這些邊賦為inf
infin
f 那麼此時不在mst
mstms
t中的邊肯定不會在mst
mstms
t內那這些邊我們就可以棄掉不要了
注意理解我們在分治的每一層都進行了這個操作
這樣減少的點是逐漸遞進的
而這樣到最後l=r
l=rl=
r的時候就已經只剩會影響的邊了
便可以快速統計答案了
複雜度o(n
log2
n)
o(nlog^2)
o(nlog
2n)
#include
using
namespace std;
#define ll long long
inline
intread()
while
(isdigit
(ch)
)res=
(res<<3)
+(res<<1)
+(ch^48)
,ch=
getchar()
;return res*f;
}const
int n=
50005
;const
int log=20;
const ll inf=
0x3f3f3f3f
;int m,n,k,ans[n]
,fa[n]
,num[log]
,a[n]
,rk[n]
,p[n]
;struct edgee[log]
[n],q1[n]
,q2[n]
;inline
bool
comp
(const edge &a,
const edge &b)
struct askq[n]
;inline
void
init
(int tot)
}int
find
(int x)
inline
void
merge
(int u,
int v)
inline
void
contraction
(int
&tot,ll &now)
for(
int i=
1;i<=cnt;i++
)for
(int i=
1;i<=cnt;i++
) cnt=0;
for(
int i=
1;i<=tot;i++)}
for(
int i=
1;i<=cnt;i++
)q1[i]
=q2[i]
; tot=cnt;
}inline
void
reduction
(int
&tot)
else
if(q1[i]
.val==inf)q2[
++cnt]
=q1[i]
,p[q1[i]
.pos]
=cnt;
}for
(int i=
1;i<=cnt;i++
)q1[i]
=q2[i]
; tot=cnt;
}#define mid ((l+r)>>1)
void
cdq(
int l,
int r,
int dep,ll now)
return;}
for(
int i=l;i<=r;i++
)q1[p[q[i]
.pos]
].val=
-inf;
contraction
(tot,now)
;for
(int i=l;i<=r;i++
)q1[p[q[i]
.pos]
].val=inf;
reduction
(tot)
;for
(int i=
1;i<=tot;i++
)e[dep+1]
[i]=q1[i]
; num[dep+1]
=tot;
cdq(l,mid,dep+
1,now)
;cdq
(mid+
1,r,dep+
1,now);}
#undef mid
intmain()
;}for(
int i=
1;i<=k;i++
) num[0]
=m;cdq(1
,k,0,0
);for(
int i=
1;i<=k;i++
)return0;
}
CDQ分治 HNOI2010 城市建設
題目鏈結 線段樹分治 lct只有80 然後就有了cdq分治的做法 把不可能在生成樹里的扔到後面 把一定在生成樹里的扔到並查集裡存起來 分治到l r,修改邊權,跑個kruskal就行了 由於要支援撤銷,並查集要按秩合併 include cstdio include cstring include io...
HNOI2010 CITY城市建設
動態改邊權ms t mst 考慮和線段樹分治 l ct lc t一樣的思想,對修改時間分治 考慮一段時間的修改的那些邊 暴力就是當l r l r 時直接讓修改生效 然後求一遍ms t role presentation style position relative mst mst 這樣是不行的因為...
2001 Hnoi2010 City 城市建設
time limit 20 sec memory limit 162 mb submit 1098 solved 539 submit status discuss ps國是乙個擁有諸多城市的大國,國王louis為城市的交通建設可謂絞盡腦汁。louis可以在某些城市之間修建道路,在不同的城市之間修建...