• 树上差分基础


    Eezie and Pie

    时间限制: 3000MS
    空间限制: 512MB
    特判(Special Judge): 否
    题目描述
    Eezie, a pie maniac, would like to have some pies with her friends on a hot summer day. However, the weather is so hot that she can’t go outdoors and has to call for the delivery service.
    The city Eezie lives in can be represented by $N$ nodes connected by $N - 1$ edges, and the city center is node 1. In other words, the city is a rooted tree, root of which is node 1. There are $N$ pie houses in the city, the $i$-th on node $i$. For some reason, a pie house on node $i$ can only deliver its pie to nodes on the simple path from node $i$ to node 1.
    Eezie is a bit worried that a pie might lose its flavor during the deliver. After some careful calculation, she decided that a pie from the $i$-th pie house can maintain its flavor if the distance it is delivered does not exceed its flavor-loss-distance $d_i$​. The distance between two nodes on the tree is the number of edges on the simple path between them.
    Now, Eezie wants to order some pies for all her friends who live on different nodes of the tree. Therefore, she wants you to calculate for each node how many pie houses can deliver their pie to the node without flavor loss.
    输入描述
    The first line contains an integer $N(1\le N \le 2\times 10^6)$, representing the number of nodes of the city Eezie lives in.
    Each of the next $N - 1$ lines contains two integers $u, v(1\le u,v \le N)$, representing an edge. It is guaranteed that the edges form a tree.
    The last line contains $N$ integers $d_1, d_2, \cdots, d_N(0\le d_i \le N)$, representing the maximum travel distances for pies from pie houses.
    输出描述
    Output $N$ integers in a line, the $i$-th integer representing the answer for node $i$.
    样例
    输入 复制
    10
    1 2
    2 3
    2 4
    3 5
    4 6
    4 7
    1 8
    8 9
    8 10
    0 0 1 2 2 5 3 1 0 2
    输出 复制
    6 6 2 3 1 1 1 2 1 1
    来源
    2022年牛客第6场


    树上差分:
    找到i号店和i号店向上d[i]+1个店;然后进行差分操作,每个店操作完之后,进行一遍dfs求前缀和,每个店的val值就是自己加上他的子树,先dfs后操作;


    Code:

    #include 
    using namespace std;
    typedef long long ll;
    const int N = 2e6 +10;
    const int mod = 1e8;
    int n;
    vector<int> e[N];
    int d[N],dep[N],fa[N][26],val[N];
    void work(int u,int f) {
    	dep[u] = dep[f] + 1;
    	fa[u][0] = f;
    	for(int i=0; fa[u][i]; i++) fa[u][i+1] = fa[fa[u][i]][i];
    
    	for(auto i:e[u])
    		if(i!=f) work(i,u);
    }
    int getfa(int u,int stp) {
    	if(stp > dep[u]-1) return 0;
    	if(stp == dep[u]-1) return 1;
    	for(int i=25; i>=0; i--)
    		if(stp>=(1<<i))
    			stp-=(1<<i),u=fa[u][i];
    
    	return u;
    }
    void dfs(int u,int f) {
    	for(auto i:e[u]) {
    		if(i!=f) {
    			dfs(i,u);
    			val[u] += val[i];
    		}
    	}
    }
    int main() {
    	scanf("%d",&n);
    	for(int i=1; i<n; i++) {
    		int u,v;
    		scanf("%d%d",&u,&v);
    		e[u].push_back(v);
    		e[v].push_back(u);
    	}
    	for(int i=1; i<=n; i++) scanf("%d",&d[i]);
    	work(1,0);
    	for(int i=1; i<=n; i++) {
    		val[i]++;
    		val[getfa(i,d[i]+1)]--;
    	}
    	dfs(1,0);
    	for(int i=1; i<=n; i++)
    		printf("%d ",val[i]);
    	return 0;
    }
    
    /*
    
    */
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
  • 相关阅读:
    多肽TAT接枝/功能肽RGDC修饰荧光碳量子点/碳量子点修饰多肽LyP-1的制备研究
    LS1043A LSDK2108写入EMMC 未完待续
    吴恩达作业ex5:Regularized Linear Regression and Bias v.s. Variance
    电子招标采购系统源码项目说明+开发类型+解决方案+功能描述
    ubuntu gcc版本降级 Reset gcc version from 11.3 to 11.2 on Ubuntu 22.04
    Vue3+TypeScript+Vite如何使用require动态引入类似于图片等静态资源
    C语言--每日五道选择题--Day11
    SpringCloud简介
    Vue2【vue 的指令与过滤器、品牌列表案例】
    改进的人工鱼群算法求解TSP问题的研究(Matlab代码实现)
  • 原文地址:https://blog.csdn.net/m0_51376859/article/details/126255066