题意



分析

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

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

代码

为了不爆空间,用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. 六.__FILE__ , __LINE__ 与调试日志

    很多人可能不知道,C\C++编译器提供了一套针对代码文件的宏定义,它们能够帮助开发者更好的定位代码的BUG. __FILE__ 该宏定义是一个字符串,存储着当前代码文件的完整路径 __LINE__ 该 ...

  2. 20145336张子扬 《网络对抗》逆向及bof基础

    20145336张子扬 <网络对抗>逆向及bof基础 学习知识点 缓冲区溢出 缓冲区溢出 一种非常普遍.非常危险的漏洞,在各种操作系统.应用软件中广泛存在.利用缓冲区溢出攻击,可以导致程序 ...

  3. Android Studio安装与使用

    2013年谷歌推出android studio后,单独支持android开发,这是基于Java语言集成开发环境IntelliJ搭建的IDE.特别在android studio1.0稳定版出来后,谷歌将 ...

  4. 两行python代码,你是否可猜到运行结果

    两行python代码,你是否可猜到运行结果 参考: http://www.cnblogs.com/way_testlife/archive/2011/07/20/2111549.html#215689 ...

  5. [BZOJ3237]连通图

    Description Input Output Sample Input 4 5 1 2 2 3 3 4 4 1 2 4 3 1 5 2 2 3 2 1 2 Sample Output Connec ...

  6. Using SQLXML Bulk Load in the .NET Environment

    http://msdn.microsoft.com/en-us/library/ms171878.aspx 1.首先创建一张表 CREATE TABLE Ord ( OrderID ,) PRIMAR ...

  7. OpenDayLight Helium实验一 OpenDaylight的C/S模式实验

    本文基于:OpenDaylight的C/S模式实验而成 C/S 结构,即大家熟知的客户机和服务器结构.它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Ser ...

  8. POJ 3320 Jessica‘s Reading Problem(哈希、尺取法)

    http://poj.org/problem?id=3320 题意:给出一串数字,要求包含所有数字的最短长度. 思路: 哈希一直不是很会用,这道题也是参考了别人的代码,想了很久. #include&l ...

  9. ref用于类类型

    static void Main(string[] args)         { Fruit f = new Fruit()      { Weight = 1, Color = "&qu ...

  10. python 字典元素值的乘积

    my_dict = {,,} result= for key in my_dict: result=result * my_dict[key] print(result)