题意



分析

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

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

代码

为了不爆空间,用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. 商品的spu、sku及其之间的关系

    今日来总结一下,电商系统中涉及到商品时必然会遇到的几个概念,SPU.SKU.单品等.彻底搞懂和明白了这几个概念对我们设计商品表是十分必要的前提条件. SPU:标准化产品单元 SPU = Standar ...

  2. JAVA构建高并发商城秒杀系统——架构分析

    面试场景 我们打算组织一个并发一万人的秒杀活动,1元秒杀100个二手元牙刷,你给我说说解决方案. 秒杀/抢购业务场景 商品秒杀.商品抢购.群红包.抢优惠劵.抽奖....... 秒杀/抢购业务特点 秒杀 ...

  3. WinterCamp2017 游记

    Winter is coming! Day0 Day0前一天打了一轮CF,做完了ABCD,Div2 Rank59.然后就去开开心心的睡觉,准备第二天的行程. 快到一点的时候躺在了床上,睡不着,翻来覆去 ...

  4. 20145221 《Java程序设计》第八周学习总结

    20145221 <Java程序设计>第八周学习总结 教材学习内容总结 第十五章部分 - 通用API 通用API 日志: 日志对信息安全意义重大,审计.取证.入侵检测等都会用到日志信息 日 ...

  5. uboot 版本号生成过程

    uboot 版本号生成过程 uboot版本号貌似与实际开发不相关,但是我现在遇到一个bug与版本号关联密切. 这个bug与<uboot dm9000驱动故障>基本上是一样的,但是在上一篇博 ...

  6. RC 522模块在LINUX平台调试笔记

    硬件平台: 1 主控:SMDK Exynos4412 POP S5M8767A 2 RFID模块:君盾集团提供的RC522模块 3 通信接口:SPI 软件平台:Android ICS & ke ...

  7. CEF3开发者系列之CefEnableHighDPISupport详解

    在CEF3中,CefEnableHighDPISupport()这个接口函数在使用时一般不为人所注意,但是如果稍有不慎,会造成打开的网页不能填满窗口的问题.如果是需要flash插件才能运行的游戏.则会 ...

  8. [Pytorch]Pytorch加载预训练模型(转)

    转自:https://blog.csdn.net/Vivianyzw/article/details/81061765 东风的地方 1. 直接加载预训练模型 在训练的时候可能需要中断一下,然后继续训练 ...

  9. java分布式系统开关功能设计(服务升降级)

     ​问题一:在单个java系统中如何实现开关功能? ​    ​其实对于开关来说,对应Java中的类型,很好映射,就是一个boolean值,在需要做开关操作的地方,调用这个属性,判断状态,然后走相应的 ...

  10. 从零开始,使用Docker Swarm部署集群教程

    本文首先从Dockerfile创建了一个简单web镜像 然后将web镜像推送到了远程仓库,以备后面集群中不同机器自动下载 之后使用docker-compose.yml配置了一个应用 而后新建了2台虚拟 ...