Path Triples On Tree

题意是求树上都不相交或者都相交的路径三元组数量。

发现blog里没什么树形dp题,也没有cc题,所以来丢一道cc上的树形dp题。

比较暴力,比较恶心

#include<cstdio>
#include<algorithm>
#define MN 300001
#define ui long long
using namespace std;ui read_p,read_ca;
inline ui read(){read_p=0;read_ca=getchar();while(read_ca<'0'||read_ca>'9') read_ca=getchar();while(read_ca>='0'&&read_ca<='9') read_p=read_p*10+read_ca-48,read_ca=getchar();return read_p;
}
ui n,N,m,l[MN],num=0,fa[MN],s[MN],d[MN],_s[MN],S[MN],GS[MN],_S[MN],si[MN],MMH=0,_MMH=0,x,y;
struct na{ui y,ne;}b[MN<<1];
inline void in(ui x,ui y){b[++num].y=y;b[num].ne=l[x];l[x]=num;}
const ui MOD=1e9+7;
inline ui _M(ui x){while(x>=MOD)x-=MOD;while(x<0)x+=MOD;return x;}
inline void M(ui &x){while(x>=MOD)x-=MOD;while(x<0)x+=MOD;}
void dfs(ui x){si[x]=1;ui i,k=0,al=0;for (i=l[x];i;i=b[i].ne) if (!si[b[i].y]) fa[b[i].y]=x,dfs(b[i].y),al=(1LL*si[x]*si[b[i].y]+al)%MOD,si[x]+=si[b[i].y],M(s[x]+=s[b[i].y]),M(k+=d[b[i].y]);for (i=l[x];i;i=b[i].ne) if (b[i].y!=fa[x])M(MMH+=1LL*d[b[i].y]*(al-1LL*si[b[i].y]*(si[x]-si[b[i].y])%MOD)%MOD+1LL*_s[b[i].y]*(si[x]-si[b[i].y])%MOD-MOD),M(GS[x]+=1LL*s[b[i].y]*(si[x]-si[b[i].y])%MOD+GS[b[i].y]-MOD);s[x]=(1LL*al*si[x]+s[x])%MOD;M(S[x]=(1LL*(si[x]-1)*si[x]>>1)%MOD*si[x]%MOD-s[x]);d[x]=(1LL*al*(al-1)>>1)%MOD;_s[x]=k;for (i=l[x];i;i=b[i].ne) if (b[i].y!=fa[x])d[x]=(1LL*(si[x]-si[b[i].y])*s[b[i].y]+d[b[i].y]+d[x])%MOD,_s[x]=(1LL*(k-d[b[i].y])*si[b[i].y]+_s[x]+_s[b[i].y])%MOD,M(_S[x]+=(1LL*GS[b[i].y]*(si[x]-si[b[i].y])+(-1LL*si[b[i].y]*(si[x]-si[b[i].y])%MOD+al)*s[b[i].y]+_S[b[i].y])%MOD);}
void DFS(ui x,ui v,ui _v){ui i,S=0,AL=0,k=0,_k=0,P=0,al=0,o;for (i=l[x];i;i=b[i].ne) if (b[i].y!=fa[x])M(al+=1LL*(si[x]-si[b[i].y])*si[b[i].y]%MOD),M(k+=s[b[i].y]),M(_k+=1LL*s[b[i].y]*(n-si[b[i].y])%MOD),M(P+=d[b[i].y]),M(AL+=(1LL*(si[b[i].y]+1)*(n-si[b[i].y])-1)%MOD*si[b[i].y]%MOD);al=1LL*(al+si[x]-1)*((MOD+1)/2)%MOD;M(MMH+=1LL*v*al%MOD);for (i=l[x];i;i=b[i].ne) if (b[i].y!=fa[x]) o=S=_M((1LL*(si[x]-si[b[i].y])*(n-si[x])-1LL*(si[x]-si[b[i].y])*si[b[i].y]+al)%MOD),o=1LL*o*(n-si[b[i].y])%MOD,S=(1LL*S*(S-1)>>1)%MOD,M(S+=P-d[b[i].y]),DFS(b[i].y,_M(_M(v+_k-1LL*s[b[i].y]*(n-si[b[i].y])%MOD-1LL*(k-s[b[i].y])*si[b[i].y]%MOD)+1LL*(si[x]-si[b[i].y])*_v%MOD-MOD+S),_M(_v+k-MOD-s[b[i].y]+o));
}
void _DFS(ui x){ui i,k=0,al=0;for (i=l[x];i;i=b[i].ne) if (b[i].y!=fa[x]) _DFS(b[i].y),M(al+=1LL*(si[x]-si[b[i].y])*si[b[i].y]%MOD);al=1LL*(al+si[x]-1)*((MOD+1)/2)%MOD;for (i=l[x];i;i=b[i].ne) if (b[i].y!=fa[x]) M(_MMH+=((1LL*(si[x]-si[b[i].y])*(n-si[x])-1LL*(si[x]-si[b[i].y])*si[b[i].y]+al)%MOD*(si[x]-si[b[i].y])%MOD+k)*s[b[i].y]%MOD),M(k+=s[b[i].y]);for (i=l[x];i;i=b[i].ne) if (b[i].y!=fa[x]) M(_MMH+=1LL*GS[b[i].y]*(n-si[b[i].y])%MOD*(si[x]-si[b[i].y])%MOD),M(_MMH+=1LL*_S[b[i].y]*(si[x]-si[b[i].y])%MOD);
}
int main(){register ui i;n=read();for (i=1;i<n;i++) x=read(),y=read(),in(x,y),in(y,x);N=(1LL*n*(n-1)>>1)%MOD;m=1LL*N*(N-1)%MOD*(N-2)%MOD*((MOD+1)/6)%MOD;dfs(1);DFS(1,0,0);_DFS(1);M(m-=MMH+_MMH);printf("%lld\n",m);
}

View Code

转载于:https://www.cnblogs.com/Enceladus/p/6764938.html

Codechef:Path Triples On Tree相关推荐

  1. BZOJ 3221: [Codechef FEB13] Obserbing the tree树上询问( 可持久化线段树 + 树链剖分 )

    树链剖分+可持久化线段树....这个一眼可以看出来, 因为可持久化所以写了标记永久化(否则就是区间修改的线段树的持久化..不会), 结果就写挂了, T得飞起...和管理员拿数据调后才发现= = 做法: ...

  2. shell命令tree

    在Windwows下很喜欢tree命令,在CenntOS下也有这条命令,在网上找到了源代码和一段简单的脚本, 完整的tree源代码可以在这里下载: ftp://mama.indstate.edu/li ...

  3. 安利一款Python开发的仿Linux树形显示目录tree命令

    大家好,我是小小明,今天我要给大家分享一个用python实现的仿Linux的tree命令. 详见:https://pypi.org/project/filestools/ 通过以下命令安装即可直接使用 ...

  4. LeetCode 1245 Tree Diameter

    Given an undirected tree, return it's diameter, which is the number of edges in a longest path in th ...

  5. [小清新] 一段 node 脚本生成风格优雅的 Directory Tree

    一些烦恼 如果你常常在博客中插入一些文件目录结构,不免会有碰到诸如此类的问题: 使用图片输出的话,感官上不够和谐,尤其在移动端环境下,图片内容可能会被多次转码.缩放以至于影响阅读体验. 使用文本输出的 ...

  6. CPU0 处理器的架构及应用

    CPU0 处理器的架构及应用 简介 CPU0 是一个 32 位的处理器,包含 R0-R15, IR, MAR, MDR 等缓存器,结构如下图所示. 图 1 :CPU0 处理器的结构 其中各个缓存器的用 ...

  7. 启动targetcli时遭遇ImportError: cannot import name ALUATargetPortGroup故障

    targetcli是一个iSCSI配置管理工具,该工具简单易用,可以直接替换scsi-target-utils.满心欢喜的装上它,正准备一睹为快,就杯具了.报错ImportError: cannot ...

  8. linux c 内存泄漏调试工具 《valgrind用户手册》 2. 使用和理解Valgrind核心

    valgrind 用户手册原版地址:https://valgrind.org/docs/manual/manual.html 此原文地址:https://valgrind.org/docs/manua ...

  9. voc生成xml 代码

    目录 lxml windows安装 读取示例 可视化 生成示例 上面是代码,下面有调用示例 api调用代码,其实只有几行: 这个生成代码也很简洁: python生成voc xml文件_jacke121 ...

最新文章

  1. 029 浏览器不能访问虚拟机的问题解决
  2. 不在pytorch中的损失的函数
  3. 使用javabean类用户注册
  4. mysql服务器的HA集群之corosync+drbd+pacemaker实现 上
  5. 2.scala控制结构、函数、异常处理
  6. js/jquery遇到的坑总结
  7. 使用Recast.AI创建具有人工智能的聊天机器人
  8. 知乎大神深入解析:单片机晶振脚原理是什么?
  9. k8s - 如何变更CNI网络插件IP池?
  10. 关于application title一直是untitled的问题
  11. Berenson机器人艺术鉴赏家亮相切尔西画廊
  12. Servlet中参数获取方法
  13. MATLAB_平面几何_判断两平面矩形是否干涉
  14. floatmap 二维数组_第 2 章 数组
  15. 基于android的电子词典设计_基于安卓Android电子词典移动客户端APP设计(AndroidStudio,SQLit...
  16. 不同浏览器的url长度限制
  17. 手机点餐系统概述_廖师兄 微信点餐系统 springcloud学习笔记
  18. 【转】常用的shell脚本
  19. 图形界面介绍Create Placement Blockage
  20. 【idea】如何设置默认的JDK

热门文章

  1. SpringDataJpa框架单元测试实现增删改查
  2. java单链表例子_写一个java链表的例子?随便举例说一下。
  3. 师范类专业可以不考计算机二级吗,2021师范专业要考教师资格证吗?师范生需要考的证有哪些?...
  4. 第三阶段:2.产品运营:4.活动运营
  5. BZOJ2821: 作诗(Poetize)
  6. java.util.Properties类,保存时保留注释及格式不变
  7. 半斤八两中级破解 (四) TCP_UDP协议转向本地验证
  8. 依赖注入之Autofac使用总结
  9. J2EE项目工具集(转)
  10. 使用自己的按钮关闭或刷新RadWindow