Codechef:Path Triples On Tree

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/254754.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

grbl

第一次发帖...之前上论坛都是查资料的&#xff0c;发现gcode这一块资料比较少先说一下Gcode:Gcode在工业控制上用的很多&#xff0c;是一种通用的控制指令&#xff0c;数控机床上经常用&#xff0c;在我diy雕刻机&#xff08;打印机之类的&#xff09;的时候要用到&#xff0c;…

mybitis实现增,删,改,查,模糊查询的两种方式:(2)

方式二&#xff1a;mapper代理接口方式 这种方式只需要xml接口&#xff08;不用写实体类&#xff09;但是需要符合三个规范 使用mapper代理接口方式在同一目录下&#xff08;可以创建一个源文件夹&#xff0c;达到类文件和xml文件分类的作用&#xff09;xml中namespace&#xf…

C语言中的静态函数的作用

转载 在C语言中为什么要用静态函数(static function)&#xff1f;如果不用这个static关键字&#xff0c;好象没有关系。那么&#xff0c;用了static以后&#xff0c;有什么作用呢&#xff1f;我们知道&#xff0c;用了static的变量&#xff0c;叫做静态变量&#xff0c;其意义是…

c++11 原子类型与原子操作

1、原子类型和原子操作&#xff08;1&#xff09;类型&#xff08;2&#xff09;操作&#xff08;3&#xff09;详述● 原子类型只能从其模板参数类型中进行构造&#xff0c;标准不允许原子类型进行拷贝构造、移动构造&#xff0c;以及使用operator等● atomic_flag 是一个原子…

依弗科(上海)机电设备有限公司

机器人喷涂倒计时&#xff0c;上帝帮我实现愿望吧 阿门 &#xfeff;&#xfeff;&#xfeff;&#xfeff;

CoDeSys

&#xfeff;&#xfeff;CoDeSys是全球最著名的PLC内核软件研发厂家德国的3S&#xff08;SMART&#xff0c;SOFTWARE&#xff0c;SOLUTIONS&#xff09;公司出的一款与制造商无关的IEC 61131-1编程软件。CoDeSys 支持完整版本的IEC61131标准的编程环境&#xff0c;支持标准的六…

使用halcon结合机械XY轴对相机进行9点标定

小哥哥小姐姐觉得有用点个赞呗&#xff01; 先在halcon中计算仿射变换矩阵并验证 //在图像中找到的模板中心位置 PicX:[1680.721,2065.147,911.499,526.798,1290.920,1285.731,1300.953] PicY:[968.321,964.366,976.283,980.035, 587.055,394.727,1355.487] //与图像中查找…

Ubuntu Linux 提出新的发布模式——测试周

2019独角兽企业重金招聘Python工程师标准>>> 导读开源技术项目最大的优势之一就是社区的每个人都可以自由地提出想法&#xff0c;如果获得社区支持&#xff0c;它可以变成现实。著名的 Ubuntu 开发人员 Simon Quigley 就提出了一个可能改变 Ubuntu Linux 开发过程的…

【转】小白级的CocoaPods安装和使用教程

原文网址&#xff1a;http://www.jianshu.com/p/e2f65848dddc 百度有很多CocoaPods的安装教程.第一次看的时候,确实有点摸不透的感觉.经过思考,一步一步来实践,前后花了三十几分钟,才顺利使用..所以想了想,我还是写一个小白级的教程吧.细到每一个细节都说明. 让你不用10分钟解决…

常见错误总结

少打头文件 少打using namespace std; 命名冲突&#xff0c;全局变量与局部变量命名一致&#xff0c;导致使用的值不是期望值 边读边写&#xff0c;导致改后读&#xff0c;覆盖写入的值 长整数移位溢出&#xff0c;1<<63是错误的&#xff0c;应该写成1ll<<63 循环变…

HALCON相机标定相机内参相机外参

目录相机标定1.相机标定是什么2.怎么使用halcon进行相机内外参标定&#xff1f;&#xff08;1&#xff09;搭建硬件1.**相机连好电脑&#xff0c;用相机厂家软件打开相机&#xff0c;检查一下相机是否正常。**2.**接下来使用halcon连接相机**&#xff08;2&#xff09;开始标定…

angular change the url , prevent reloading

http://stackoverflow.com/questions/14974271/can-you-change-a-path-without-reloading-the-controller-in-angularjs $location.search({vln: $scope.vln_id}, false);会改变url中 &#xff1f; 后面的 搜索参数&#xff0c;但是controller不会重新实例化。angular 官方文档…

C#圆形卡尺测量程序基于halcon

废话不多说上源码 觉得帖子有用给点个赞哈 先来个效果图 下边的是源码&#xff0c;自己新建一个文件粘贴进去&#xff0c;包含到您现在的项目 中。这串源码后边是使用方法。 using System; using System.Collections.Generic; using System.Linq; using System.Text; usin…

科维PLC运行时系统ProConOS embedded CLR 2.2 特定应用

ProConOS embedded CLR是新型的开放式标准化PLC运行时系统&#xff0c;符合IEC 61131标准&#xff0c;可执行不同的自动化任务&#xff08;PLC、PAC、运动控制、CNC、机器人和传感器&#xff09;。   通过采用国际标准的微软中间语言&#xff08;依据IEC/ISO 23271标准为MSIL…

set()与get()详细解答(C#)

这几天在搬砖时候用到了set()与get()&#xff0c;同事问了我一些问题&#xff0c;我打算在博客中总结一下。 觉得帮助到了您&#xff0c;帮我点个赞哦。 属性访问器 其实说白了就是操作一个属性&#xff0c;更通俗一点说就是对一个变量的取值与赋值。 先来看get() get 访问…

如何判断一条曲线是否自己相交?

今天看到群里有人在问这个问题&#xff0c;想了一个解决办法。 我们首先作假设&#xff0c;如果一条曲线有交点&#xff0c;那么它就是相交的对吧。可能大家想的都是这样&#xff0c;就开始找各种方法去识别交点。 我们换个角度想一下&#xff1a;是不是我们判断这条曲线是否带…

hdu 5813 Elegant Construction

水题 题意&#xff1a;有n个城市&#xff0c;给你每个城市能到达城市的数量&#xff0c;要你构图&#xff0c;输出有向边&#xff0c;要求无环&#xff0c;输出任意的解 例&#xff1a; Sample Input 332 1 021 143 1 1 0Sample OutputCase #1: Yes21 22 3Case #2: NoCase #3: …

halcon相机标定及图像矫正(代码)

侵删 1 halcon相机标定和图像矫正 对于相机采集的图片&#xff0c;会由于相机本身和透镜的影响产生形变&#xff0c;通常需要对相机进行标定&#xff0c;获取相机的内参或内外参&#xff0c;然后矫正其畸变。相机畸变主要分为径向畸变和切向畸变&#xff0c;其中径向畸变是由透…

函数参数的传递问题(一级指针和二级指针)

函数参数的传递问题&#xff08;一级指针和二级指针&#xff09; [转]原以为自己对指针掌握了&#xff0c;却还是对这个问题不太明白。请教&#xff01; 程序1&#xff1a; void myMalloc(char *s) //我想在函数中分配内存,再返回 { s(char *) malloc(100); } void …

Win7下使用U盘安装linux Ubuntu16.04双系统图文教程

Win7下使用U盘安装linux Ubuntu16.04双系统图文教程 Ubuntu&#xff08;友帮拓、优般图、乌班图&#xff09;是一个以桌面应用为主的开源GNU/Linux操作系统&#xff0c;Ubuntu 是基于DebianGNU/Linux&#xff0c;支持x86、amd64&#xff08;即x64&#xff09;和ppc架构&#xf…