图论习题

发布时间 2023-12-15 14:14:09作者: rw156

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 }
Code