2 solutions

  • 1
    @ 2025-10-5 16:00:03
    #include<bits/stdc++.h>
    using namespace std;
    const int N=2e5+10;
    vector<int> g[N];
    int w[N];
    void dfs(int u,int fa)
    {
    	w[u]+=w[fa]; //累加父亲节点 
    	for(auto j:g[u]) //处理每个孩子节点 
    	{
    		if(j==fa) continue;
    		dfs(j,u);
    	}
    }
    int main()
    {
    	int n,q;
    	cin>>n>>q;
    	for(int i=1;i<n;i++) //构建图 
    	{
    		int a,b;
    		cin>>a>>b;
    		g[a].push_back(b);
    		g[b].push_back(a);
    	}
    	while(q--) //获取节点需要累加的值 
    	{
    		int u,x;
    		cin>>u>>x;
    		w[u]+=x;
    	}
    	dfs(1,0); //遍历处理每个节点 
    	for(int i=1;i<=n;i++)
    	{
    		cout<<w[i]<<" "; 
    	}
    	return 0;
    }
    
    
    • 0
      @ 2026-3-2 18:16:52

      40分 Time Exceeded

      #include<bits/stdc++.h>
      using namespace std;
      const int N=2e5+10;
      vector<int> v[N];
      int f[N];
      int n,q;
      void dfs(int p,int x)
      {
          f[p]+=x;
          for(int i=0;i<v[p].size();i++)
          {
              dfs(v[p][i],x);
          }
      }
      int main()
      {
          cin>>n>>q;
          for(int i=1;i<n;i++)
          {
              int a,b;
              cin>>a>>b;
              v[a].push_back(b);
          }
          for(int i=1;i<=q;i++)
          {
              int p,x;
              cin>>p>>x;
              dfs(p,x);
          }
          for(int i=1;i<=n;i++)
          {
              cout<<f[i]<<" ";
          }
          return 0;
      }
      
      • 1

      Information

      ID
      2599
      Time
      1000ms
      Memory
      256MiB
      Difficulty
      5
      Tags
      # Submissions
      26
      Accepted
      8
      Uploaded By