1.树的搜索的板子题。每次修改的时候在子树根节点标记,并且向下传递dfs即可
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define endl '\n' 4 #define ll long long 5 #define cy cout << "YES" << endl 6 #define cn cout << "NO" << endl 7 int _,n,m; 8 const int N = 2e5 + 10,inf = 1e9; 9 const int mod = 1e9 + 7; 10 int c[N]; 11 vector<int> g[N]; 12 13 void dfs(int u,int fa){ 14 c[u] += c[fa]; 15 for(int v : g[u]) 16 if(v != fa) 17 dfs(v,u); 18 } 19 20 int main() 21 { 22 cin >> n >> m; 23 for (int i = 1,u,v; i < n; i ++ ){ 24 scanf("%d %d", &v, &u); 25 g[u].push_back(v); 26 g[v].push_back(u); 27 } 28 29 for (int i = 1,a,b; i <= m; i ++ ){ 30 scanf("%d %d", &a, &b); 31 c[a] += b; 32 } 33 dfs(1,0); 34 for (int i = 1; i <= n; i ++ ) cout << c[i] << " "; 35 cout << endl; 36 return 0; 37 }