1 条题解

  • 0
    @ 2026-5-30 9:15:24
    #include<bits/stdc++.h>
    using namespace std;
    #define int long long 
    const int N=2e5+10;
    vector<int>e[N];
    int a[N],b[N],tp;
    int fa[N],f[N],c[N];
    void dfs(int x,int xfa)
    {
    	fa[x]=xfa;
    	for(int y:e[x])
    		if(y!=xfa)dfs(y,x);
    }
    void dfs2(int x,int xfa)
    {
    	tp+=f[x];c[x]=tp;
    	for(int y:e[x])
    		if(y!=xfa)dfs2(y,x);
    	tp-=f[x];
    }
    signed main()
    {
    	ios::sync_with_stdio(0);
    	cin.tie(0);cout.tie(0);
    	int n;cin>>n;
    	for(int i=1;i<n;i++)
    	{
    		cin>>a[i]>>b[i];
    		e[a[i]].push_back(b[i]);
    		e[b[i]].push_back(a[i]);
    	}
    	dfs(1,0);
    	int q;cin>>q;
    	while(q--)
    	{
    		int t,w,k;cin>>t>>w>>k;
    		int u=a[w],v=b[w];
    		if(t==2)swap(u,v);
    		if(fa[v]==u)tp+=k,f[v]-=k;
    		else f[u]+=k;
    	}
    	dfs2(1,0);
    	for(int i=1;i<=n;i++)cout<<c[i]<<'\n';
    	return 0;
    }
    
    • 1

    信息

    ID
    12019
    时间
    2000ms
    内存
    1024MiB
    难度
    8
    标签
    递交数
    13
    已通过
    6
    上传者