給定一棵無邊權樹,中間新穿插m
mm條有邊權的邊,問原樹中所有邊連向的兩個點在失去此邊後的最短路
比較容易想到暴力spf
aspfa
spfa
o (n
ke
)o(nke)
o(nke)
#include
#include
#include
#include
using
namespace std;
int n,m,l[
100001
],x[
100001
],y[
100001
],w,dis[
100001
],tot,bh[
100001][
2];bool vis[
100001];
struct nodee[
200001];
inline
intread()
inline
void
write
(register
int x)
inline
intspfa
(register
int x,
register
int y)
} vis[u]
=false;}
return dis[y];}
inline
void
add(
register
int u,
register
int v,
register
int w)
;l[u]
=tot;
return;}
signed
main()
for(
register
int i=n,u,v;i)for
(register
int i=
1,ans;i)write
(ans)
;putchar(10
);e[bh[i][0
]].w=e[bh[i][1
]].w=0;}
}
然後我們發現,一棵樹斷開一條邊後必定是兩個聯通分量,所以我們只需找到連線這兩個聯通分量的最短邊即可,用並查集
o (n
mα(n
))
o(nmα(n))
o(nmα(
n))
#include
#include
#include
using
namespace std;
int l[
100001
],x[
100001
],y[
100001];
int f[
100001
],u[
100001
],v[
100001
],w[
100001
],ans,n,m,fs[
100001];
inline
intfind
(register
int x)
inline
intread()
inline
void
write
(register
int x)
signed
main()
}
接著我們又發現,那條邊其實就是之前點的lca
lcalc
a,用tar
ja
ntarjan
tarjan
演算法即可
時間複雜度:o(m
logm
+mα(
n)
)o(mlogm+mα(n))
o(mlog
m+mα
(n))
#include
#include
#include
#include
using
namespace std;
int l[
100010
],dep[
100010
],p[
100010];
int f[
100010
],ans,n,m,x,y,tot,fa[
100010
],d[
100010];
bool vis[
100010];
struct nodee[
100010];
struct nodee[
200010];
inline
void
add(
register
int u,
register
int v,
register
int id)
;l[u]
=tot;
return;}
inline
bool
cmp(node x,node y)
inline
intfind
(register
int x)
inline
intread()
inline
void
write
(register
int x)
if(x>9)
write
(x/10);
putchar
(x%10+48
);return;}
inline
void
bfs(
register
int x)}}
return;}
inline
void
merge
(int
&x,register
int y)
signed
main()
;bfs(1
);sort
(e+1
,e+1
+m,cmp)
;for
(register
int i=
1;i<=m;i++
)for
(register
int i=
1;i)write
(d[i]),
putchar(10
);}
2023年10月30日提高組
jzoj 5194 盟主的憂慮 jzoj 5907 輕功 問乙個樹中有多少個連通塊最大最小點權之差等於kkk 也就是 k 的個數 k 1 的 個數 k 的個數 k 1 的個數 k 的個數 k 1 的 個數,那麼就可以列舉點,對於這個點求的是以它為最大點權符合要求的個數,那麼容易得到合法條件a m a...
2023年10月30日提高組 T1 A
求樹上聯通快中最大值與最小值之差為k kk的方案數 設最大值與最小值之差為xxx x xx正好為k kk的方案數 x k x leq k x k 的方案數 x x k的方案數 於是我們就可以樹形dpdp dp啦fi fs on 1 f i prod f 1 fi fson 1 include def...
2023年10月29日提高組 T1 A
n nn個球,m mm個盤,盤子不能空,求本質上不相同的方案數 首先深搜 include using namespace std int n,m,ans inline void dfs register int dep,register int sy,register int last 分完了,統計...