codechef FUN WITH TREES
题目大意:
给一棵树root=1的树:
给一些操作:u v 的路径所有节点的node + val;
最后m个询问:u 节点(包括u) sum%mod 是多少。
LCA + RMQ;
我们每次mark ,u , v, +=val;
fa=lca[u,v])-=val;
fa[fa]-=val
你会发现下次DFS一边的时候可以把所以答案更新出来。DFS 从下往上更新。
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <math.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
#define N 100001
#define LN 20
#define mod 1000000007 vector<int>mp[N];
int mark[N];
int dp[LN][N];
int dep[N];
int ans[N],tmp[N]; int lca(int l,int r)
{
if (dep[l]<dep[r]) swap(l,r);
int dif=dep[l]-dep[r];
for (int i=;i<LN;i++)
if ((dif>>i)&) l=dp[i][l]; if (l==r) return l; for (int i=LN-;i>=;i--)
if (dp[i][l]!=dp[i][r]) l=dp[i][l],r=dp[i][r];
return dp[][l];
} void dfs(int u,int fa,int level)
{
dp[][u]=fa;
dep[u]=level;
for (int i=;i<mp[u].size();i++)
{
int v=mp[u][i];
if (v==fa) continue;
dfs(v,u,level+);
}
} int dfs2(int u,int fa=)
{
int sum=mark[u];
for (int i=;i<mp[u].size();i++)
{
int v=mp[u][i];
if (v==fa) continue;
dfs2(v,u);
sum+=tmp[v];
sum%=mod;
ans[u]+=ans[v];
ans[u]%=mod;
}
tmp[u]=sum;
ans[u]+=tmp[u];
ans[u]%=mod;
} int main()
{
int n,u,q;
scanf("%d",&n);
scanf("%d%d",&u,&q);
// for (int i=0;i<=n;i++) mp[i].clear();
for (int i=;i<n;i++)
{
int a,b;
scanf("%d%d",&a,&b);
mp[a].push_back(b);
mp[b].push_back(a);
}
dfs(,,);
for (int j=;j<LN;j++)
for (int i=;i<=n;i++)
dp[j][i]=dp[j-][dp[j-][i]];
while (u--)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
mark[a]+=c;
mark[b]+=c;
mark[a]%=mod;
mark[b]%=mod;
int l=lca(a,b);
mark[l]-=c;
mark[l]%=mod;
mark[dp[][l]]-=c;
mark[dp[][l]]%=mod;
} dfs2();
while (q--)
{
int x;
scanf("%d",&x);
printf("%d\n",(ans[x]+mod)%mod);
} return ;
}
codechef FUN WITH TREES的更多相关文章
- Codechef Dynamic Trees and Queries
Home » Practice(Hard) » Dynamic Trees and Queries Problem Code: ANUDTQSubmit https://www.codechef.co ...
- Codechef December Challenge 2014 Chef and Apple Trees 水题
Chef and Apple Trees Chef loves to prepare delicious dishes. This time, Chef has decided to prepare ...
- codechef : TREDEG , Trees and Degrees
其实有原题,生成树计数 然鹅这题里面是两道题, 50pts 可以用上面那题的做法直接过掉,另外 50pts 要推推式子,搞出 O n 的做法才行(毕竟多项式常数之大您是知道的) 虽说这道题里面是没有 ...
- 【CodeChef EDGEST】Edges in Spanning Trees(树链剖分+树上启发式合并)
点此看题面 大致题意: 给你两棵\(n\)个点的树,对于第一棵树中的每条边\(e_1\),求存在多少条第二棵树中的边\(e_2\),使得第一棵树删掉\(e_1\)加上\(e_2\).第二棵树删掉\(e ...
- [C#] C# 知识回顾 - 表达式树 Expression Trees
C# 知识回顾 - 表达式树 Expression Trees 目录 简介 Lambda 表达式创建表达式树 API 创建表达式树 解析表达式树 表达式树的永久性 编译表达式树 执行表达式树 修改表达 ...
- hdu2848 Visible Trees (容斥原理)
题意: 给n*m个点(1 ≤ m, n ≤ 1e5),左下角的点为(1,1),右上角的点(n,m),一个人站在(0,0)看这些点.在一条直线上,只能看到最前面的一个点,后面的被档住看不到,求这个人能看 ...
- [LeetCode] Minimum Height Trees 最小高度树
For a undirected graph with tree characteristics, we can choose any node as the root. The result gra ...
- [LeetCode] Unique Binary Search Trees 独一无二的二叉搜索树
Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...
- [LeetCode] Unique Binary Search Trees II 独一无二的二叉搜索树之二
Given n, generate all structurally unique BST's (binary search trees) that store values 1...n. For e ...
随机推荐
- transform、transition 和 animation区别
CSS3中和动画有关的属性有三个 transform.transition 和 animation.下面来一一说明: transform 从字面来看transform的释义为改变,使 ...
- 【持续更新】把.net代码转换为java代码的注意事项
国内大多数大学的软件相关专业大多强制学生学习c和Java,但.net 的几个语言可以说是选学的. 由于visual studio在windows平台上使用相对方便,一些同学会在上大学的Java课之前自 ...
- MongoDB最简单的入门教程之三 使用Java代码往MongoDB里插入数据
前两篇教程我们介绍了如何搭建MongoDB的本地环境: MongoDB最简单的入门教程之一 环境搭建 以及如何用nodejs读取MongoDB里的记录: MongoDB最简单的入门教程之二 使用nod ...
- JavaScript-条件循环
JavaScript-条件循环 条件判断语句 if 语句 - 只有当指定条件为 true 时,使用该语句来执行代码 if (表达式){ 当条件为 true 时执行的代码} if...else 语 ...
- springboot测试的时候插入数据: error performing isolated work; SQL [n/a]; nested exception is org.hibernate...
上网查了一下,说的是自增惹得麻烦!!在@GeneratedValue后面加上框框中的内容就OK拉!
- DLL动态库多次加载问题
原因涉及DLL加载和运行机制,主要有两点:1)DLL动态链接库无法独立运行,必须由一个应用程序进程加载到进程空间后才能使用.加载DLL的进程称为宿主进程.被加载的DLL属于宿主进程,不属于宿主进程内某 ...
- tensorflow-gpu install check
https://gist.github.com/mrry/ee5dbcfdd045fa48a27d56664411d41c#file-tensorflow_self_check-py-L16
- WebSocket 学习笔记
WebSocket 学习笔记 来自我的博客 因为项目原因需要用到双工通信,所以比较详细的学习了一下浏览器端支持的 WebSocket. 并记录一些遇到的问题. 简介 WebSocket 一般是指浏览器 ...
- 「 Luogu P2801 」 教主的魔法——分块
# 解题思路 修改,就是一个区间修改的常规操作,但是为了迎合查询的需要,对两端的不完整的块需要暴力重构,重新进行排序操作,保证每一块都是单调上升的顺序. 然后再说进行查询的操作,起初,我们需要在每一个 ...
- FastNet C++/Python 网络通信库之 协议
协议可以使用的基础数据类型: UInt8,UInt16,UInt32,UInt64Int8,Int16,Int32,Int64Float,Double,Bool,String [T] 数组,T代表元 ...