2023年10月30日提高組 T3 C

2021-08-30 11:32:07 字數 3343 閱讀 8918

給定一棵無邊權樹,中間新穿插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 分完了,統計...