題目
a-b路徑的最長邊最小 這個路徑一定在最小生成樹上。可以離線做。刪邊不好做。看成倒序加邊。先維護乙個最小生成樹。每次加邊的時候 看這個邊是否小於最小生成樹中a-b路徑的最長邊(一定是這樣!!! 然後保證新新增的邊是有用邊 不會成環的),小於的話,將那個邊刪了,新增這條邊。怎麼記錄答案呢。把邊當成乙個帶權值的點。 而
下面的**只在洛谷過了 bzoj不能用map記錄邊的編號 先按x y(x優先)排序。然後在l[x],r[x]二分查詢他的編號。我deubg了好久,還是沒過。好傷心。不想寫了。
#include
#include
#include
using
namespace std;
const
int n=
1e5+
5,m=
1e6+5;
struct nodee[m]
,q[m]
;inline
intcmp
(node a,node b)
int f[n+m]
,ch[n+m][2
],tag[n+m]
,st[n+m]
;int mx[n+m]
,val[n+m]
,f[n+m]
;map
int,
int>
,int
>mp;
inline
intseek
(int x)
inline
void
combine
(int x,
int y)
inline
void
pushup
(int x)
inline
void
pushdown
(int x)
inline
intnotroot
(int x)
inline
void
route
(int x)
inline
void
splay
(int x)
inline
void
access
(int x)
inline
void
makeroot
(int x)
inline
intfindroot
(int x)
inline
void
split
(int x,
int y)
inline
void
link
(int x,
int y)
inline
void
cut(
int x,
int y)
int vis[m]
,ans[n]
;int
main()
for(
int i=
1,typ;i<=qq;
++i)
for(
int i=
1,x,y,num=
0;i<=m;
++i)
for(
int i=qq,x,y;i>=1;
--i)}}
for(
int i=
1;i<=qq;
++i)if(
!q[i]
.w)printf
("%d\n"
,ans[i]);
}
洛谷P4172 水管局長
題目大意 給定 n 個點,m 條邊的無向圖,支援兩種操作 動態刪邊和查詢任意兩點之間路徑上邊權的最大值最小是多少。題解 引理 對原圖求最小生成樹,可以保證任意兩點之間的路徑上邊權的最大值取得最小值。證明 任取兩點 x,y,若 x,y 的路徑上最大值最小的邊不在最小生成樹的路徑上,可以將那條邊加入最小...
Luogu P4172水管局長(LCT)
題目鏈結 有個結論是x到y的路徑上最長邊權值等於最小生成樹上最長邊權值,於是問題轉化為最小生成樹。再考慮把問題反過來,刪邊變成加邊。於是變成動態維護最小生成樹,lct可以做到。include include include include include include define maxn 20...
P4172 WC2006 水管局長
題目鏈結 題目背景 sc 省 my 市有著龐大的地下水管網路,嘟嘟是 my 市的水管局長 就是管水管的啦 題目描述 每天供水公司可能要將一定量的水從 u uu 處送往 v vv 處,嘟嘟需要為供水公司找到一條從 u uu 至 v vv 的水管的路徑,接著通過資訊化的控制中心通知路徑上的水管進入準備送...