题意



分析

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

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

代码

为了不爆空间,用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. jquery实现ajax跨域请求

    1.跨域问题: 是因为浏览器的同源策略是对ajax请求进行阻拦了,但是不是所有的请求都给做跨域,像是一般的href属性,a标签什么的都不拦截. 如: 项目一:p1.html <body> ...

  2. springboot+mybatis项目自动生成

    springboot_data_access_demo基于rapid,根据自定义模版生成的基于mybatis+mysql的数据库访问示例项目.简单配置数据库信息,配置不同的生成策略生成可以直接运行访问 ...

  3. Linux学习笔记之Linux通过yum安装桌面

    Centos系统最小化安装以后,进入默认是命令行模式,所以需要进一步安装桌面. 1,本文使用的是CentOS 7 Minimal版本. 2,启动linux操作系统,进入后没有图形界面,但是有时候还是希 ...

  4. 20145302张薇 《网络对抗技术》逆向及BOF基础实践

    20145302张薇 <网络对抗技术>逆向及BOF基础实践 实验内容 实践对象:名为20145302的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单 ...

  5. [BZOJ2117]Crash的旅游计划

    Description 眼看着假期就要到了,Crash由于长期切题而感到无聊了,因此他决定利用这个假期和好友陶陶一起出去旅游. Crash和陶陶所要去的城市里有N (N > 1) 个景点,Cra ...

  6. 【日志过滤】Nginx日志过滤 使用ngx_log_if不记录特定日志

    ngx_log_if是Nginx的一个第三方模块.它在Github上的描述是这样介绍的:ngx_log_if是一个独立的模块,允许您控制不要写的访问日志,类似于Apache的"CustomL ...

  7. Flask 4 拓展

    NOTE 1.Flask被设计为可拓展模式,所以没有提供如数据库和用户认证等重要的功能,允许开发者按需开发. 2.使用Flask-Script支持命令行选项: 安装flask-script: pip ...

  8. shell 计时获取输入

    #!/bin/bash   if read -t 5 -p "please enter your name:" name   then       echo "hello ...

  9. 【Android】冷门常用 ADB

    清除应用缓存adb shell pm clear 包名 获取手机中安装的包名,加上部分包名可以做筛选 adb shell pm list package adb shell pm list packa ...

  10. log4j日志文件配置

    ### set log levels ### ### debug (打印代码中logger.debug(xx)的信息)> info(打印代码中logger.info(xx)的信息) log4j. ...