2023年10月30日提高組

2021-08-30 11:14:58 字數 3712 閱讀 7417

jzoj 5194 盟主的憂慮

jzoj 5907 輕功

問乙個樹中有多少個連通塊最大最小點權之差等於kkk

也就是(

<=k

)的個數

−(

<=k

−1)的

個數

(<=k)的個數-(<=k-1)的個數

(<=k

)的個數

−(<=k

−1)的

個數,那麼就可以列舉點,對於這個點求的是以它為最大點權符合要求的個數,那麼容易得到合法條件a[m

ax]≥

a[so

n]且a

[max

]−a[

son]

≤m且s

on

>ma

x(避免

點權重複

)或者a

[mx]

<

>a[

son]

a[max]\geq a[son]且a[max]-a[son]\leq m且son>max(避免點權重複)或者a[mx]<>a[son]

a[max]

≥a[s

on]且

a[ma

x]−a

[son

]≤m且

son>ma

x(避免

點權重複

)或者a

[mx]

<

>a[

son]

根據乘法原理得到dp(

max)

=∏i=

son∈

maxd

p(i)

+1

dp(max)=\prod _^

dp(max

)=i=

son∈

max∏

dp(i

)+1​

#include

#define rr register

using

namespace std;

const

int mod=

19260817

;struct nodee[

6701];

int k=

1,ls[

3401

],a[

3401

],n,ans,m;

inline

signed

iut(

)inline

void

add(

int x,

int y)

; ls[x]

=k; e[

++k]

=(node)

; ls[y]

=k;}

inline

signeddp(

int x,

int fa,

int mx)

return ans;

}signed

main()

在一棵樹上刪掉一條邊後找一條邊權最小的邊使其恢復刪掉的邊的連通性

也就是說多餘的邊的兩點所經過的邊是被多餘的邊的邊權貢獻的,所以說可以用並查集維護

#include

#include

#include

#define rr register

#define max(a,b) (((a)>(b))?(a):(b))

#define min(a,b) (((a)<(b))?(a):(b))

using

namespace std;

const

int n=

100001

;struct nodee[n*3]

;int n,m,f[n+1]

,k,pre[n+1]

,ans[n+1]

,ls[n+1]

,dep[n+1]

,father[n+1]

;inline

signed

iut(

)inline

signed

add(

int x,

int y,

int w)

; ls[x]

=k; e[

++k]

=(node)

; ls[y]

=k;}

signed

cmp(node a,node b)

inline

void

print

(int ans)

inline

void

bfs()}

inline

signed

getf

(int u)

inline

void

doit

(int

&x,int y)

signed

main()

;sort

(e+1

,e+1

+m,cmp)

;bfs()

;//從小到大排序

for(rr int i=

1;i<=m;

++i)

for(rr int i=

1;i++i)

print

(ans[i]),

putchar(10

);return0;

}

從起點0到終點n

nn,可以選擇花費w

iw_i

wi​秒經過c

ic_i

ci​個木樁,但其間不能有限制,更換i

ii需要t

tt的時間,第1次選擇不需要時間,問最少的時間

那麼就是動態規劃了

f [n

][k]

f[n][k]

f[n][k

]表示到達點n

nn並使用過第k

kk種方式的最少時間

f [x

+c[i

]][i

]=mi

nf[x+c[i]][i]=min\

f[x+c[

i]][

i]=m

in初始化f[c

[i]]

[i]=

w[i]

f[c[i]][i]=w[i]

f[c[i]

][i]

=w[i

]最後答案min

min\

min

#include

#include

#define rr register

#define r(i,a,b) for (rr int i=a;i<=b;++i)

#define min(a,b) (((a)<(b))?(a):(b))

using

namespace std;

int n,k,tim,c[

101]

,w[101

],s[

501]

[101

],minn=

2147483647

;long

long ans,f[

501]

[101];

inline

signed

iut(

)signed

main()

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月30日提高組模擬賽 總結

首先初步閱題,發現t1t1 t1暴搜能拿分,先跳,看到第二題,很明顯的最優化問題,於是dpdp dp過掉,第三題發現最短路可以拿分,先打了個最短路,後面發現可以用並查集70分,第一題最後打了個dfs dfsdf s 40分,竟然水過了wyc wycwy c大佬,深感愧疚!佔比方法10 50 d fs...

2023年10月30日提高組 T3 C

給定一棵無邊權樹,中間新穿插m mm條有邊權的邊,問原樹中所有邊連向的兩個點在失去此邊後的最短路 比較容易想到暴力spf aspfa spfa o n ke o nke o nke include include include include using namespace std int n,m...