【dfs】树

在这里插入图片描述

在这里插入图片描述


思路:

emmm
正解好像是啥树状数组
反正我不会
然后aj也说80分就够了
就打了个80分的暴搜
有2种操作:
操作(a).“1 x val”表示给节点x的权值加val。
操作(b).“2 x”输出节点x当前的权值。
我们模拟这两种操作去做dfs就好


C o d e Code Code:

#include<iostream>
#include<cstdio>

using namespace std;

int a[100000],n,m,x,z,now[100000],y;
struct node
{
    
    
	int w,p;
}e[1000005];

void dfs(int dep,int g)
{
    
    
	a[dep] += g;
	for(int i = now[dep]; i ; i = e[i].p)//搜相邻的边
	dfs(e[i].w, -g);
}

int main()
{
    
    
	scanf("%d%d",&n,&m);
	for(int i = 1; i <= n; i++)
	scanf("%d",&a[i]);
	for(int i = 1; i < n; i++)
	{
    
    
		scanf("%d%d",&x,&y);
		e[i] = node{
    
    y,now[x]}; now[x]=i;//邻接表建树
	}
	for(int i=1;i<=m;i++)
	{
    
    
		scanf("%d%d",&x,&y);
		if(x == 2)//操作2
		{
    
    
			printf("%d\n",a[y]);
			continue;
		}
		scanf("%d",&z);
		dfs(y,z);//dfs
	}  
} 

猜你喜欢

转载自blog.csdn.net/hunkwu/article/details/108550089