c 小h和遊戲
小h正在玩乙個戰略類遊戲,她可以操縱己方的飛機對敵國的n座城市(編號為1~n)進行轟炸
敵國的城市形成了一棵樹,小h會依次進行q次轟炸,每次會選擇乙個城市a進行轟炸,和這座城市距離不超過2的城市都會受損(這裡距離的定義是兩點最短路徑上的邊數),轟炸結束後,小h還想知道當前城市a受損的次數
作為遊戲的開發者之一,你有義務回答小h的問題
第1行,兩個整數n(1≤n≤750000)、q(1≤q≤750000)
第2~n行,每行兩個整數表示樹上的一條邊
第n+1~n+q行,每行乙個整數,表示小h這次轟炸的城市
輸出q行,每行乙個整數表示這一次轟炸的城市在此次轟炸後共計受損幾次
輸入4 4
1 2
2 3
3 4
1 2 3 4
輸出1
2 3
3離線查詢問題就是防止重複計算貢獻
設定乙個陣列計算點x對他的的子節點與孫節點的影響
( 輸入量很大要常數優化下
#include
using namespace std;
#define clr(a,b) memset(a,(b),sizeof(a))
#define ll long long
const int inf = 0x3f3f3f3f;
const int maxn = 1e6+10;
const int mod = 19260817;
int sum[maxn][3];
int fa[maxn];
vector g[maxn];
long long read()
return res;
}void dfs(int u, int f)
}int main()
dfs(1,0);
while(q--)
return 0;
}
D 小H和遊戲
對於被轟炸城市而言,它的孩子,孩子的孩子,父親的父親,父親及父親的孩子均受到了影響,暴力更改顯然不行,不妨用標記更新,詳細見 1 include2 using namespace std 3const int maxn 750005 4 5struct node 6edge maxn 1 9 int...
《ACM程式設計》 H題
問題描述 給你幾組20進製的數,求上下兩行對應兩個數相加的和。解題思路 用字串形式輸入,然後將其轉化成數字,最後在將10以上的數用字元輸出。如果兩個數相加超過19,那麼就要向下一位產生進製。其中數制轉換可以用呼叫函式完成,節省時間。include include include include us...
Wannaly挑戰賽10 C小h和遊戲
c小h和遊戲 小h正在玩乙個戰略類遊戲,她可以操縱己方的飛機對敵國的n座城市 編號為1 n 進行轟炸 敵國的城市形成了一棵樹,小h會依次進行q次轟炸,每次會選擇乙個城市a進行轟炸,和這座城市距離不超過2的城市都會受損 這裡距離的定義是兩點最短路徑上的邊數 轟炸結束後,小h還想知道當前城市a受損的次數...