假設 s
ss 到 t
tt 路徑上一條邊 (u,
v)(u,v)
(u,v
) 被刪掉之後最短路會如何變化。
建出以 t
tt 為根的最短路樹,如果 (u,
v)(u,v)
(u,v
) 不在樹上,那麼我們直接從 u
uu 沿著最短路樹走到 t
tt 即可。
否則,如果 (u,
v)(u,v)
(u,v
) 在最短路樹上,那麼 v
vv 一定是 u
uu 的父親。那麼我們需要從 u
uu 走到 u
uu 子樹內的任意乙個點 x
xx,然後再從 x
xx 經過一條非樹邊跳到乙個在 u
uu 子樹外的點 y
yy,然後再沿最短路樹走到 ttt。
類似這樣:
(其中黑色虛線邊表示的是非樹邊,紅叉邊表示被刪掉的邊,藍色表示路徑)
設 d is
udis_u
disu
表示最短路樹上 t
tt 到 u
uu 的路徑長。考慮如何維護上面藍色路徑的最小值。把這段路程表示出來:
d is
x−di
su+w
(x,y
)+di
sydis_x-dis_u+w_+dis_y
disx−
disu
+w(
x,y)
+di
sy
那麼我們直接維護 dis
x+w(
x,y)
+dis
ydis_x+w_+dis_y
disx+
w(x,
y)+
disy
的最小值即可。
對於每乙個點 u
uu,用堆維護其子樹內 dis
x+w(
x,y)
+dis
ydis_x+w_+dis_y
disx+
w(x,
y)+
disy
的最小值。
合併的時候用左偏樹即可。
最多合併 n−1
n-1n−
1 次(n−1
n-1n−
1 條邊),所以維護這個的過程時間不會超過 o(n
logn)
o(n\log n)
o(nlogn)
。不妨設 g
ug_u
gu 表示刪掉邊 (u,
fau)(u,\textit_u)
(u,fau
) 之後到達 t
tt 的最小值。(g
ug_u
gu 通過上面的過程求出)
令 d pu
dp_u
dpu
表示 s=u
s=us=
u 時的答案,用 v
vv 更新 u
uu 時的轉移為:
d pu
=min(
u,v)
(max(
dpv+
w(u,
v),\left(\max\left(dp_v+w_, \beging_u&v=\textit_u\\dis_u&v\neq \textit_u\end\right)\right)
dpu=(
u,v)
min
(max(d
pv+
w(u,
v),
;data
(int a,
int b)
bool
operator
<
(const data &a)
const};
struct heap//左偏樹
else now=
++node;
to[now]
=y,val[now]
=v;return now;
}int
merge
(int x,
int y)
intpop
(int u)
}heap;
int n,m;
int cnt,head[n]
,nxt[m<<1]
,to[m<<1]
,w[m<<1]
;int dis[n]
,fa[n]
;int idx,dfn[n]
,size[n]
;int root[n]
;int dp[n]
,g[n]
;bool vis[n];
vector<
int>e[n]
;priority_queueq;
void
adde
(int u,
int v,
int wi)
void
dijkstra()
}}}void
dfs(
int u)
for(
int i=head[u]
;i;i=nxt[i]
)while
(root[u]
&&intree
(heap.to[root[u]
],u)
) root[u]
=heap.
pop(root[u]);
if(root[u]
) g[u]
=heap.val[root[u]
]-dis[u];}
voiddp(
)}}}
intmain()
dijkstra()
;for
(int i=
1;i) e[fa[i]].
push_back
(i);
dfs(n)
;// puts("i didn't mle!!!");
// return 0;dp(
);if(dp[1]
!=dp[0]
)printf
("%d\n"
,dp[1]
);else
puts
("-1");
return0;
}/*5 10
1 3 10
1 5 4
3 4 6
5 2 10
1 2 6
4 5 2
2 3 2
4 1 5
4 2 6
5 3 3
*/
八 傳送郵件
傳送郵件 如下 from email.mime.text import mimetext from email.header import header import smtplib import datetime from poseidon.myutil import myutil import ...
5 傳送模板訊息
詳情參看 傳送模板訊息 介面呼叫請求說明 http請求方式 post post資料示例如下 data keynote1 keynote2 keynote3 remark createmunu url,params string url send template url.replace access...
SprongBoot傳送郵件(三)傳送附件郵件
還是在 sprongboot傳送郵件 一 傳送簡單文字郵件helloworld 的配置基礎上新增如下 param to param subject param content param filepath 檔案路徑 throws messagingexception public void send...