Wannaly挑戰賽10 C小h和遊戲

2021-08-15 20:40:42 字數 1112 閱讀 5444

c小h和遊戲

小h正在玩乙個戰略類遊戲,她可以操縱己方的飛機對敵國的n座城市(編號為1~n)進行轟炸

敵國的城市形成了一棵樹,小h會依次進行q次轟炸,每次會選擇乙個城市a進行轟炸,和這座城市距離不超過2的城市都會受損(這裡距離的定義是兩點最短路徑上的邊數),轟炸結束後,小h還想知道當前城市a受損的次數

作為遊戲的開發者之一,你有義務回答小h的問題

cnt:表示直接炸到a城,cntf:表示炸到a的兒子而影響到a,cntff:表示炸到a的孫子而影響到a

於是炸到a時的更新為,cnt[a]++;cntf[fa[a]]++;cntff[fa[fa[a]]]++;

a點的答案為cnt[fa[a]] + cnt[fa[fa[a]]] + cntf[fa[a]] + cntf[a] + cntff[a]

/**

n個結點的樹,現在進行q次轟炸,轟炸其中的結點a,距離當前城市不超過2的城市都會受損,

轟炸結束後,小h還想知道當前a城市受損的次數。

cnt:表示直接炸到a城,cntf:表示炸到a的兒子而影響到a,cntff:表示炸到a的孫子而影響到a

於是炸到a時的更新為,cnt[a]++;cntf[fa[a]]++;cntff[fa[fa[a]]]++;

a點的答案為cnt[fa[a]] + cnt[fa[fa[a]]] + cntf[fa[a]] + cntf[a] + cntff[a]

*/#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long ll;

const

int maxn = 8e5;

vector

way[maxn];

int fa[maxn],cnt[maxn],cntf[maxn],cntff[maxn];

void dfs(int x,int f)

int main()

dfs(1,0);

while(q--)

}return

0;}

Wannafly挑戰賽10 C 小H和遊戲

題目傳送門 首先我們把無根樹變成有根樹 乙個點的受損次數來自於 1.父親的父親結點的貢獻 2.父親結點的貢獻 3.兄弟結點的貢獻 4.孩子結點的貢獻 具體看 includeusing namespace std const int maxn 750000 100 vectorg maxn int f...

Wannafly挑戰賽10 小H和密碼

一開始用的dfs很明顯過不去,後來看大佬的 原來是動態規劃,另外這題的資料太水了,不少 連樣例都過不去卻可以ac,我也是服了orz。分別用乙個二維陣列dial和乙個一維陣列empty來表示密碼盤,dial存的是第i個密碼盤上有哪些字母,empty表示第i個密碼盤是否有 即空字元。再設定乙個二維陣列d...

Wannafly挑戰賽10 A小h和迷宮

a小h和迷宮 小h陷入了乙個迷宮中,迷宮裡有乙個可怕的怪獸,血量有n點,小h有三瓶魔法藥水,分別可以使怪獸損失a b c 的血量 之後怪獸的血量會向下取整 小h想合理地運用這三瓶藥水,使怪獸失去盡可能多的血量 注意 每瓶藥水只能用一次 模擬即可,注意是血量向下取整,則失去的血量向上取整!includ...