题意



分析

这种题一般是推公式,发现必须求得的量,然后定义函数记忆化。

然后那些函数里面又是递归处理,合并。

代码

为了不爆空间,用map存记忆化内容。

#include<bits/stdc++.h>

using namespace std;

#define gc c=getchar()
#define r(x) read(x)
#define ll long long template<typename T>
inline void read(T&x)
{
x=0;
T k=1;
char gc;
while(!isdigit(c))
{
if(c=='-')k=-1;
gc;
}
while(isdigit(c))
{
x=x*10+c-'0';
gc;
}
x*=k;
} const int p=1e9+7;
const int N=65; struct Tree
{
ll a,b,c,d,l,siz,ans;
} A[N]; map<pair<pair<int,ll>,ll>,ll>mp; ll dfs2(int rt,ll u,ll v)
{
if(!rt)
return 0;
pair<pair<int,int>,int> Hash=make_pair(make_pair(rt,u),v);
if(mp[Hash])
return mp[Hash];
Tree &t=A[rt];
ll &ans=mp[Hash];
if(u==v)
return 0;
if(u<A[t.a].siz&&v<A[t.a].siz)
return ans=dfs2(t.a,u,v);
if(u<A[t.a].siz&&v>=A[t.a].siz)
return ans=(dfs2(t.a,t.c,u)+dfs2(t.b,t.d,v-A[t.a].siz)+t.l)%p;
if(u>=A[t.a].siz&&v<A[t.a].siz)
return ans=(dfs2(t.a,t.c,v)+dfs2(t.b,t.d,u-A[t.a].siz)+t.l)%p;
return ans=dfs2(t.b,u-A[t.a].siz,v-A[t.a].siz);
} map<pair<int,ll>,ll>mpp;
ll dfs1(int rt,ll x) //T_rt 以 x 为根,所以点的(子树大小*边权)之和
{
if(!rt)
return 0;
Tree &t=A[rt];
pair<int,ll> Hash=make_pair(rt,x);
if(mpp[Hash])
return mpp[Hash];
ll &ans=mpp[Hash];
if(x<A[t.a].siz)
return ans=(dfs1(t.b,t.d)+dfs1(t.a,x)+A[t.b].siz%p*(dfs2(t.a,t.c,x)+t.l)%p)%p;
else
return ans=(dfs1(t.a,t.c)+dfs1(t.b,x-A[t.a].siz)+A[t.a].siz%p*(dfs2(t.b,t.d,x-A[t.a].siz)+t.l)%p)%p;
} int main()
{
freopen("zi.in","r",stdin);
freopen("zi.out","w",stdout);
int m;
r(m);
A[0].siz=1;
for(int i=1; i<=m; ++i)
{
Tree &x=A[i];
r(x.a),r(x.b),r(x.c),r(x.d),r(x.l);
x.siz=A[x.a].siz+A[x.b].siz;
x.ans=(A[x.a].ans+A[x.b].ans
+(ll)(A[x.a].siz%p)*(A[x.b].siz%p)%p*x.l%p
+A[x.b].siz%p*dfs1(x.a,x.c)%p
+A[x.a].siz%p*dfs1(x.b,x.d)%p)%p;
printf("%lld\n",x.ans);
}
}

test20181024 zi的更多相关文章

  1. VS2010的调试参数/Zi /DEBUG

    /DEBUG只是是否要生成调试信息的开关.这个命令行选项在链接器页面那里 /Zi只是生成的调试信息的格式,这个格式是.pdb文件.当然还有好几种格式.这个命令行在编译页那里 如果上面的选项没有设置对, ...

  2. KEIL的ARM编译器对RW和ZI段的一个处理

    按照C编译器编译的结果,一般会产生RO段,RW段,ZI段.RO是程序中的指令和常量,RW是程序中的已初始化全局变量,ZI是程序中的未初始化或初始化为零的全局变量. 那么如下的代码 int aaa; i ...

  3. Error D8016 '/ZI' and '/Gy-' command-line options are incompatible

    使用vs运行工程时出现错误: Severity Code Description Project File Line Suppression StateError D8016 '/ZI' and '/ ...

  4. stm32 ARM中的RO、RW和ZI DATA

    一直以来对于ARM体系中所描述的RO,RW和ZI数据存在似是而非的理解,这段时间对其仔细了解了一番,发现了一些规律,理解了一些以前书本上有的但是不理解的东西,我想应该有不少人也有和我同样的困惑,因此将 ...

  5. 【转】RO段、RW段和ZI段 --Image$$??$$Limit 含义(zz)

    @2019-02-14 [小记] RO段.RW段和ZI段 --Image$$??$$Limit 含义(zz)

  6. 解决“错误 D8016 “/ZI”和“/Gy-”命令行选项不兼容 ”问题

    在Visual Studio 2017中调试VC++6.0代码,出现该问题,解决方案如下:(1)[项目]—>[属性]—>[C/C++]—> [常规]—>[调试信息格式]—> ...

  7. ARM 编译产生.map之RO RW ZI

    RO:  程序中的指令和常量,存储在常量和代码区,因为是不能改变的,所以—READ ONLY; RW: 程序中的已初始化全局变量和静态变量,存储在堆中,因为是变量,所以——READ AND WRITE ...

  8. RW RO ZI ROM keil中的含义

    编译的一个ARM的程序,会得到这样的信息: ============================================================================== ...

  9. 哪来的gou zi 阿龙(最新更新于1.21日)

    众所周知,信息竞赛教室有一个特gou zi的人,叫做阿龙. 这个人呢,特别好玩,特别gou zi 还有一个人,叫Sugar,这个人特别喜欢和阿龙闹,so,一系列爆笑无脑的事就发生了! 1.谁是鱼? 一 ...

随机推荐

  1. idea中使用插件Grep Console在IDEA的log的不同的级别,可以设置不同的颜色。

    一.安装. 1. 2. 3. 二,使用. 1. 2.

  2. devise 自定义手机号登录

    user model中配置 validates_uniqueness_of :phone def email_required? false end 修改user migration文件,给phone ...

  3. Linux 基础 —— Linux 进程的管理与监控

    这篇文章主要讲 Linux 中进程的概念和进程的管理工具.原文:http://liaoph.com/inux-process-management/ 进程的概念 什么是进程 进程(Process)是计 ...

  4. Entity Framework Code First在Oracle下的伪实现(转)

    为什么要说是伪实现,因为还做不到类似MsSql中那样完全的功能.Oralce中的数据库还是要我们自己手动去创建的.这里,我们舍掉了Model First中的EDMX文件,自己在代码里面写模型与映射关系 ...

  5. Python 如何判断一个函数是generator函数?

    如何判断一个函数是否是一个特殊的 generator 函数?可以利用 isgeneratorfunction 判断: >>>from inspect import isgenerat ...

  6. Jquery的深度拷贝和深度克隆

    有人问,拷贝和克隆不都是“复制”的意思吗. 这位看官问的好,一般情况下是一样的,但在jquery中却有些不同.jqurey深度拷贝一般只js对象的复制,是$.extend()方法,jquery深度克隆 ...

  7. openwrt编译系统制作ubi镜像时会使用系统自带的ubinize还是openwrt编译系统中编译的ubinize

    答:使用openwrt编译系统中编译的ubinize,那么这个工具在哪个目录下?在staging_dir/host/bin目录下

  8. 【乱码】运行java -jar xx.jar存到hbase里的数据乱码

    程序在Eclipse里运行没有问题,但是打成jar包之后写入hbase里的数据会有乱码,ES里正常 经过测试,运行命令里加上-Dfile.encoding=utf-8 就可以正常写入,但是cmd命令里 ...

  9. class文件的结构

    任何一个class文件都对应着唯一一个类或接口的定义信息,但反过来说,类或接口的定义信息并不一定都在文件里(比如类或接口也可以通过类加载器直接生成) class文件是一组以8位字节为基础单位的二进制流 ...

  10. Gym 101246H ``North-East''(LIS)

    http://codeforces.com/gym/101246/problem/H 题意: 给出n个点的坐标,现在有一个乐队,他可以从任一点出发,但是只能往右上方走(包括右方和上方),要经过尽量多的 ...