NOIP2018模擬賽2018 10 18 開荒

2021-08-29 08:00:33 字數 2608 閱讀 9254

description

題目背景: 尊者神高達作為乙個萌新,在公升級路上死亡無數次後被乙隻大黃嘰帶回了師門。他加入師門後發現有無窮無盡的師兄弟姐妹,這幾天新副本開了,尊者神高達的師門作為乙個 pve師門,於是他們決定組織一起去開荒。

題目描述: 師門可以看做以 1 為根的一棵樹,師門中的每乙個人都有一定的裝備分數。一共會有 q 個事件。每個事件可能是一次開荒,也可能是因為開荒出了好裝備而導致乙個人的裝分出現了變化。對於一次開荒,會有 k 個人組織,由於師門的號召力很強,所以所有在組織者中任意兩個人簡單路徑上的人都會參加。

input

第一行 n ,q; 接下來 1 行 n 個數,代表每個人的分值; 接下來 n-1 行 u,v 代表一條邊 接下來 q 行 q 代表詢問,接下來 k 個數代表組織的人數,讀入為 0時停止讀入。 c 代表修改,輸入 x,w 代表將 x 的分值變為 w

output

共 q 的數量行,為開荒的人的總分值

sample input

4 410 5 2 2

1 22 3

2 4q 3 4 0

c 3 200

q 3 4 0

q 1 4 0

sample output

樣例解釋:

第一次詢問,參加的人有 2,3,4 5+2+2=9

第一次修改,權值為 10 5 200 2

第二次詢問,參加的人有 2,3,4 5+200+2=207

第三次詢問,參加的人有 1,2,4 10+5+2=17

data constraint

資料範圍:

20%的資料 n<=10000,q<=500;

另外 20%的資料 k=2

另外 20%的資料 沒有修改操作

所有資料 n,q<=100000,所有詢問 k 的和<=1000000

保證資料合法

–長知識了

首先是虛樹:只把lca中要用到的有用點拿出來,重新建的一棵樹

具體實現主要是按dfs序排序的棧的維護

發現在統計答案的時候就是dfs序相鄰的兩個點之間的路徑上的和

又可以用樹狀陣列維護(差分的思想)

修改也可以o(1)在樹狀陣列上處理了

#include

#include

#include

#include

#include

#include

using

namespace std;

const

int maxn=

1e5+5;

int n,q;

int head[maxn]

,next[maxn*2]

,to[maxn*2]

,cnt;

long

long w[maxn]

,s[maxn]

;int fa[maxn][20

],d[maxn]

,dfn[maxn]

,last[maxn]

,sum;

char opt;

int a[maxn*2]

,k,tot;

int stack[maxn]

,top;

long

long ans;

void

add(

int u,

int v)

void

build

(int x,

int f)

last[x]

=sum;

}void

putin

(int x,

long

long y)

bool

comp

(const

int&a,

const

int&b)

intlca

(int x,

int y)

return fa[x][0

];}long

long

ask(

int x)

intmain()

d[1]=

1;build(1

,0);

for(

int i=

1;i<=n;i++

)while

(q--)}

sort

(a+1

,a+1

+k,comp)

; tot=k;

for(

int i=

1;i) a[

++k]

=lca

(a[i]

,a[i+1]

);sort

(a+1

,a+1

+k,comp)

; k=

unique

(a+1

,a+1

+k)-a-1;

ans=0;

top=0;

for(

int i=

1;i<=k;i++

)printf

("%lld\n"

,ans);}

else

}return0;

}

NOIP2018模擬賽2018 10 18 輕功

description 題目背景 尊者神高達進入了基三的世界,作為乙個 mmorpg 做任務是必不可少的,然而跑地圖卻令人十分不爽。好在基三可以使用輕功,但是尊者神高達有些手殘,他決定用梅花樁練習輕功。題目描述 一共有 n 個木樁,要求從起點 0 開始,經過所有梅花樁,恰好到達終點 n,尊者神高達一...

NOIp2018模擬賽三十六

好久沒打模擬賽了。今天一樣是兩道國集,一道bzoj題 成績 13 0 95 108 a題開始看錯題了。導致樣例都沒看懂,結果xfz提醒我後我理解了乙個我自認為正確的題意 事實證明我和xfz都錯了qwq 然後瞎打了乙個線段樹,結果只有13分。c題一看就是乙個大平衡樹,開始手打了100 行發現自己肯定調...

NOIP2018 信心賽 雞腿

波波手上有許多校慶時分發的雞腿券,他決定用玩遊戲的方式來分配這些雞腿券。已知波波會給出乙個 的 棋盤,並且他會在棋盤的左上角 1,1 處放置乙個棋子。兩名雞腿競爭者 和 將輪流移動棋子,每一回合 選手只能向上 下 左 右四個方向使棋子移動一步。為了使遊戲盡快結束波波還規定不能重複經過已經經過的格 子...