Bzoj4817 SDOI2017 樹點塗色

2021-08-15 13:30:00 字數 2488 閱讀 3726

bzoj

做個轉化

最開始都是虛邊 操作1

1

就是lc

t' role="presentation">lct

lct裡的

acce

ssa cc

es

s操作

求的就是路徑上虛邊的個數+1

然後就好辦了

用樹鏈剖分+線段樹來維護每個點到根虛邊的個數的最大值 操作1

1

:access

' role="presentation">acc

essa

cces

s時虛實邊的轉換,要把原來連的點的sp

lay spl

ay

的最左邊的點在原樹中的子樹所有點+1,再把現在連的點做同樣的操作-1 操作2

2

:單點查詢,記de

ep[x

]' role="presentation">dee

p[x]

deep

[x]為

x x

到根的虛邊個數,那麼答案就是de

ep[x

]+de

ep[y

]−2∗

deep

[lca

]+1' role="presentation">dee

p[x]

+dee

p[y]

−2∗d

eep[

lca]

+1de

ep[x

]+de

ep[y

]−2∗

deep

[lca

]+1操作

3 3

:子樹最大值

# include 

# define rg register

# define il inline

# define fill(a, b) memset(a, b, sizeof(a))

using

namespace

std;

typedef

long

long ll;

const

int _(2e5 + 5);

il ll input()

int size[_], fa[_], deep[_], top[_], son[_], dfn[_], index, ed[_], id[_];

int fst[_], nxt[_], to[_], cnt, n, m;

int ch[2][_], fa[_];

int mx[_ << 2], tag[_ << 2];

il void add(rg int u, rg int v)

# define lson x << 1, l, mid

# define rson x << 1 | 1, mid + 1, r

il void build(rg int x, rg int l, rg int r)

rg int mid = (l + r) >> 1;

build(lson); build(rson);

mx[x] = max(mx[x << 1], mx[x << 1 | 1]);

}il void modify(rg int x, rg int l, rg int r, rg int l, rg int r, rg int v)

rg int mid = (l + r) >> 1;

if(l <= mid) modify(lson, l, r, v);

if(r > mid) modify(rson, l, r, v);

mx[x] = max(mx[x << 1], mx[x << 1 | 1]) + tag[x];

}il int query(rg int x, rg int l, rg int r, rg int l, rg int r)

# undef lson

# undef rson

il void dfs1(rg int u)

}il void dfs2(rg int u, rg int top)

il int lca(rg int u, rg int v)

return deep[u] > deep[v] ? v : u;

}il int son(rg int x)

il int isroot(rg int x)

il int find(rg int x)

il void rotate(rg int x)

il void splay(rg int x)

il void access(rg int x)

}int main(rg int argc, rg char* argv)

else

printf("%d\n", query(1, 1, n, dfn[x], ed[x]) + 1);

}return

0;}

BZOJ4817 Sdoi2017 樹點塗色

time limit 10 sec memory limit 128 mb submit 515 solved 302 submit status discuss bob有一棵n個點的有根樹,其中1號點是根節點。bob在每個點上塗了顏色,並且每個點上的顏色不同。定義一條路 徑的權值是 這條路徑上的點...

bzoj4817 SDOI2017 樹點塗色

bob有一棵n個點的有根樹,其中1號點是根節點。bob在每個點上塗了顏色,並且每個點上的顏色不同。定義一條路 徑的權值是 這條路徑上的點 包括起點和終點 共有多少種不同的顏色。bob可能會進行這幾種操作 1 x 把點x到根節點的路徑上所有的點染上一種沒有用過的新顏色。2 x y 求x到y的路徑的權值...

bzoj 4817 Sdoi2017 樹點塗色

bob有一棵n個點的有根樹,其中1號點是根節點。bob在每個點上塗了顏色,並且每個點上的顏色不同。定義一條路 徑的權值是 這條路徑上的點 包括起點和終點 共有多少種不同的顏色。bob可能會進行這幾種操作 1 x 把點x到根節點的路徑上所有的點染上一種沒有用過的新顏色。2 x y 求x到y的路徑的權值...