20191212 C 簡單點分治

2021-10-01 10:32:50 字數 1419 閱讀 7114

給定一棵有n個節點的無根樹,樹上的每個點有乙個非負整數點權。定義一條路徑的價值為路徑上的點權和-路徑上的點權最大值。 給定引數p

pp,我們想知道,有多少不同的樹上簡單路徑,滿足它的價值恰好是p

pp的倍數。 注意:單點算作一條路徑;u!=

vu!=v

u!=v

時,( u,

v)

(u,v)

(u,v)和(v,

u)

(v,u)

(v,u

)只算一次。

n

<=1

e5,p

<=1

e7

n<=1e5 , p<=1e7

n<=1

e5,p

<=1

e7這個,智商壓制題。

其實只需要點分治之後按路徑最大值排序,再來個簡單的子樹內去重即可。

a cc

od

e\rm ac\ code

accode

#include

#define maxn 100005

#define ll long long

using

namespace std;

int n,p,a[maxn]

;int info[maxn]

,prev[maxn<<1]

,to[maxn<<1]

,cnt_e=0;

void

node

(int u,

int v)

int mn,rt,vis[maxn]

,sz[maxn]

;void

dfs(

int u,

int ff,

int tsz)

intgert

(int u,

int tsz)

ll ans =0;

int c[maxn]

,mx[maxn]

,sm[maxn]

,cnt[

10000007];

bool

cmp(

const

int&u,

const

int&v)

void

ser(

int u,

int ff,

int mx,

int sm)

void

solve

(int u)

for(

int i=info[u]

,v;i;i=prev[i])if

(!vis[v=to[i]])

solve

(gert

(v,sz[v]))

;}intmain()

2019 12 12 C 點分治 去重

記憶體限制 256 mib時間限制 1000 ms 題目描述 給定一棵有n個節點的無根樹,樹上的每個點有乙個非負整數點權。定義一條路徑的價值為路徑上的點權和 路徑上的點權最大值。給定引數p,我!們想知道,有多少不同的樹上簡單路徑,滿足它的價值恰好是p的倍數。注意 單點算作一條路徑 u v時,u,v ...

C 框架winform實現簡單點餐系統

1 構思介面並進行設計 2 思考需要用到的控制項以及控制項需要更改的屬性 3 構思將要觸發的事件以及部分業務流xrkdj程 4 通過點選菜品,進行新增,並計算 5 介面的美化以及功能的完善 1 如何獲取控制項中的內容 2 點選按鈕,查詢並新增查詢的內容 3 新增按鈕對應的點選事件 4 如何一次性取出...

1011 A B 和 C (15 分) 簡單數學

1011 a b 和 c 15 分 簡單數學 給定區間 2 31 2 31 內的 3 個整數 a b 和 c,請判斷 a b 是否大於 c。輸入格式 輸入第 1 行給出正整數 t 10 是測試用例的個數。隨後給出 t 組測試用例,每組佔一行,順序給出 a b 和 c。整數間以空格分隔。輸出格式 對每...