题目大意:

给一棵树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的更多相关文章

  1. Codechef Dynamic Trees and Queries

    Home » Practice(Hard) » Dynamic Trees and Queries Problem Code: ANUDTQSubmit https://www.codechef.co ...

  2. 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 ...

  3. codechef : TREDEG , Trees and Degrees

    其实有原题,生成树计数 然鹅这题里面是两道题, 50pts 可以用上面那题的做法直接过掉,另外 50pts 要推推式子,搞出 O n 的做法才行(毕竟多项式常数之大您是知道的) 虽说这道题里面是没有 ...

  4. 【CodeChef EDGEST】Edges in Spanning Trees(树链剖分+树上启发式合并)

    点此看题面 大致题意: 给你两棵\(n\)个点的树,对于第一棵树中的每条边\(e_1\),求存在多少条第二棵树中的边\(e_2\),使得第一棵树删掉\(e_1\)加上\(e_2\).第二棵树删掉\(e ...

  5. [C#] C# 知识回顾 - 表达式树 Expression Trees

    C# 知识回顾 - 表达式树 Expression Trees 目录 简介 Lambda 表达式创建表达式树 API 创建表达式树 解析表达式树 表达式树的永久性 编译表达式树 执行表达式树 修改表达 ...

  6. hdu2848 Visible Trees (容斥原理)

    题意: 给n*m个点(1 ≤ m, n ≤ 1e5),左下角的点为(1,1),右上角的点(n,m),一个人站在(0,0)看这些点.在一条直线上,只能看到最前面的一个点,后面的被档住看不到,求这个人能看 ...

  7. [LeetCode] Minimum Height Trees 最小高度树

    For a undirected graph with tree characteristics, we can choose any node as the root. The result gra ...

  8. [LeetCode] Unique Binary Search Trees 独一无二的二叉搜索树

    Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...

  9. [LeetCode] Unique Binary Search Trees II 独一无二的二叉搜索树之二

    Given n, generate all structurally unique BST's (binary search trees) that store values 1...n. For e ...

随机推荐

  1. html调用js提示方法名 is not defined处理方法

    解决办法(方法名 is not defined): dosave=function(){ alert("方法名在前"); } 下面这种写法有时候会出现错误: function do ...

  2. Qt获取本机IP地址

    Qt获取本机IP地址: Qt版本:4.8.6 #include <QtNetwork/QNetworkInterface.h> QString ipAddr; QList<QHost ...

  3. VBA 从sql存储过程-记录集-导入

    cnn.Open cnnstr cmd.ActiveConnection = cnn cmd.CommandTimeout = 120 cmd.CommandText = "dbo.t_bi ...

  4. AS400服务程序总结

    1.服务程序的创建和调用过程 1.1生成module 1.2编写BND文件确定输出接口 1.3生成服务程序 1.3.运行调用程序时,将服务程序导入到作业内存区active group,常驻内存 2.结 ...

  5. 嵌入式C语言-学习书籍推荐(pdf附上百度云链接)

    先推荐学习视频网站: https://www.bilibili.com/video/av22631677?from=search&seid=800092160484173881 书籍只推荐2本 ...

  6. Java后端学习路线_备战

    SpringCloud项目实战 Dubbo项目实战 项目实战应涵括哪些技术: 缓存.消息队列 WEB应用服务器(Weblogic.Jetty.JBoss.WebSphere) NoSQL(MongoD ...

  7. vue >>> 编译失败问题 loader 待解决( iview vue脚手架生成)

    vue >>> 编译失败问题 loader 待解决 用vue iview 脚手架 来一次试试~

  8. docker 深入理解之cgroups

    cgroups 资源限制 cgroups 是什么 cgroups 最初名为process container,有Google工程师Paul Menage和Rohit Seth于 2006 年提出,后由 ...

  9. 一个Lucene.Net的Demo

    今天突然想来看一下全文检索,于是就了解了一下Lucene.Net,然后把公司目前的产品表拿来练手,写了这么个Demo. 先看一下Demo的代码 public class ProductReposito ...

  10. 测试常用的linux命令

    一.系统 1.halt:         关机   poweroff: 关机 2.reboot:     重启 二.处理目录和文件的命令 1.ll:     显示文件详细信息 ls:    显示文件目 ...