最近的葉子

2021-09-12 08:28:37 字數 2146 閱讀 8689

【分析】

暴力樹形dp有70分就果斷寫完去搞t2,結果t2愣是沒有結果。。。。

又是一道方便離線維護的題。和2月24日卡常數那道題頗為相似。考慮從u到v邊權為c,顯然有所有v的子樹點距離-c,其餘點距離+c,回溯也也是乙個θ(l

og2n

)\theta(log_2n)

θ(log2

​n)【code】

去掉o2也可以過,把vector換成鏈式前向星可以更快,std遍歷最好用迭代器。

#pragma gcc optimize(2)

#include

#include

#include

#include

#include

#define int long long

using

namespace std;

const

int maxn=

5e5+

1000

;struct edge

;vectorv[maxn]

;struct query

;vectorq[maxn]

;int ans[maxn]

;int bg[maxn]

,ed[maxn]

,dfs_clock;

int val[maxn]

;int n,m;

void

dfs(

int u)

ed[u]

=dfs_clock;

if(bg[u]

!=ed[u]

)val[u]

=1ll

<<60;

}inline

void

read

(int

&x)while

(tmp>=

'0'&&tmp<=

'9') x=

(x<<1)

+(x<<3)

+tmp-

'0',tmp=

getchar()

;}struct segt[maxn<<2]

;inline

void

update

(int x)

void

build

(int x,

int l,

int r)

int mid=l+r>>1;

build

(x<<

1,l,mid)

;build

(x<<1|

1,mid+

1,r)

;update

(x);

}inline

void

pushdown

(int x)

void

modify

(int x,

int l,

int r,

int val)

pushdown

(x);

if(t[x<<1]

.r>=l)

modify

(x<<

1,l,r,val);if

(t[x<<1|

1].l<=r)

modify

(x<<1|

1,l,r,val)

;update

(x);

}int

query

(int x,

int l,

int r)

void

solve

(int u)

for(vector

::iterator it=v[u]

.begin()

;it!=v[u]

.end()

;it++)}

signed

main()

);}dfs(1

);build(1

,1,n);

for(

int i=

1;i<=m;i++))

;}solve(1

);for(

int i=

1;i<=m;i++

)return0;

}

Leetcode 742 二叉樹最近的葉子結點

time 20190924 type medium 給定乙個 每個結點的值互不相同 的二叉樹,和乙個目標值 k,找出樹中與目標值 k 最近的葉結點。這裡,與葉結點 最近 表示在二叉樹中到達該葉節點需要行進的邊數與到達其它葉結點相比最少。而且,當乙個結點沒有孩子結點時稱其為葉結點。在下面的例子中,輸入...

葉子的染色

有乙個 m 個節點的樹,可以選擇乙個度大於 1 的節點作為根,並將一些點染為白色或黑色,染色方案因保證根到每個葉子節點的路徑上都至少有乙個有色節點,並且路徑上離葉子結點最近的節點顏色為 c i 我們考慮選哪個節點為根不影響答案的選擇,因為我們只需要維護葉子節點上方最近的有顏色節點,非葉節點是否為根並...

Ext 樹 葉子查詢與非葉子查詢

原 hiddenpkgs tree.root.cascade function n bug主要出在這段控制隱藏的 上,其中關鍵是n.ui.ctnode.offsetheight 3,當節點有子節點的時候,他的n.ui.ctnode.offsetheight就會大於3,所以會顯示。修改這個bug,只需...