当前位置: 首页 > news >正文

门户网站英文贵州省建设学校网站

门户网站英文,贵州省建设学校网站,青岛市区商场黄页,我的网站怎么不能搜索P3565 [POI2014]HOT-Hotels 参考题解 题目大意#xff1a; 给定一棵树#xff0c;在树上选 3 个点#xff0c;要求两两距离相等#xff0c;求方案数。 三个点树上两两距离为d存在下面两种情况 某个点三个子树#xff08;保证该点是LCA#xff09;中分别由三个点距离它为…P3565 [POI2014]HOT-Hotels 参考题解 题目大意 给定一棵树在树上选 3 个点要求两两距离相等求方案数。 三个点树上两两距离为d存在下面两种情况 某个点三个子树保证该点是LCA中分别由三个点距离它为d对于某一个点它的 d 级祖先以及子树内两个以它为LCA距它 d 的点 对于情况一设计dp fu,jf_{u,j}fu,j​表示以uuu为根的子树距i距离为jjj的点数 对于情况二设计dpgu,jg_{u,j}gu,j​表示以uuu为根的子树两个点的到LCA距离相等此出用d表示LCA到uuu的距离为d−jd-jd−j的点对 对于fu,jf_{u,j}fu,j​的状态转移十分显然fu,j∑v∈sonufv,j−1f_{u,j}\sum_{v\in son_u }f_{v,j-1}fu,j​∑v∈sonu​​fv,j−1​ 而对于gu,jg_{u,j}gu,j​来说存在两种情况 某个子树内部存在两个点gu,j∑v∈sonugv,j1g_{u,j}\sum_{v\in son_u}g_{v,j1}gu,j​∑v∈sonu​​gv,j1​两个不同的子树各贡献一个点以uuu为LCAgu,j∑v,w∈sonu,v≠wfv,j−1×fw,j−1g_{u,j}\sum_{v,w\in son_u,v \ne w} f_{v,j-1}×f_{w,j-1}gu,j​∑v,w∈sonu​,v​w​fv,j−1​×fw,j−1​ 很明显第二中情况fv,j−1×fw,j−1,fw,j−1×fv,j−1f_{v,j-1}×f_{w,j-1}, f_{w,j-1}×f_{v,j-1}fv,j−1​×fw,j−1​,fw,j−1​×fv,j−1​是同一种情况这里我们让vvv是uuu较靠前的儿子即可避免重复计算 而对于答案计算来说也存在两种情况 首先对于三个点树上两两距离为d的情况都可以看成两个点在一个子树中而另一个点“别处” 在子树vvv中选一个点而在其他子树中选两个点gu,j1×fv,jg_{u,j1}×f_{v,j}gu,j1​×fv,j​在子树vvv中选两个点而在其他子树中选一个点fu,j−1×gv,jf_{u,j-1}×g_{v,j}fu,j−1​×gv,j​ 同样为了避免重复计算只需要让其他子树搞成vvv前面的子树即可 注意上述gu,j1g_{u,j1}gu,j1​和fu,j−1f_{u,j-1}fu,j−1​都还未算vvv对其的贡献这个只需要先计算答案在加贡献即可。 计算状态数组和答案时都有计算前面子树的情况直接运用前缀和的思想即可边计算答案边转移数组。 这里要提一点我们至今没有提到gu,0g_{u,0}gu,0​对答案的贡献它确实对答案有贡献但是我们已经计算过了如果在此加上会重复计算。 而其他博主在计算的时候加上gu,0g_{u,0}gu,0​实际上增加的时gwson,1g_{wson,1}gwson,1​即重儿子的贡献。 根据g的转移方程可知道gu,0g_{u,0}gu,0​的贡献全部来自于∑v∈sonugv,1\sum_{v\in son_u}g_{v,1}∑v∈sonu​​gv,1​而计算fu,j−1×gv,jf_{u,j-1}×g_{v,j}fu,j−1​×gv,j​对答案的贡献时我们具体写一下fu,0×gv,1f_{u,0}×g_{v,1}fu,0​×gv,1​而fu,01f_{u,0}1fu,0​1因此已经计算过gu,0g_{u,0}gu,0​的贡献 然后就是长链剖分优化dp每次保存长儿子的贡献其他儿子暴力合并每条长链都会在链头暴力合并一次时间复杂度O(len)O(len)O(len)总的合并时间复杂度O(n)O(n)O(n) 最后如果写指针版本的话由于g数组是倒着转移的fff要多开一倍的内存否则g可能倒回来覆盖掉fff code #define IO ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr) #includecstring #includeiostream #includealgorithm using namespace std; using lllong long; constexpr int N5010; int h[N],e[2*N],ne[2*N],idx; void add(int a,int b){e[idx]b,ne[idx]h[a],h[a]idx;} int n; int dep[N],son[N]; void dfs1(int u,int fa) {for(int ih[u];i!-1;ine[i]){int ve[i];if(vfa) continue;dfs1(v,u);if(dep[v]dep[son[u]]) son[u]v;}dep[u]dep[son[u]]1; }ll pool[4*N]; ll *f[N],*g[N],*nowpool; ll ans; void dfs2(int u,int fa) {f[u][0]1;if(son[u]){f[son[u]]f[u]1;g[son[u]]g[u]-1;dfs2(son[u],u);ansg[son[u]][1];// 加上重儿子的贡献}for(int ih[u];i!-1;ine[i]){int ve[i];if(vfa||vson[u]) continue;f[v]now;nowdep[v]1;g[v]now;nowdep[v];dfs2(v,u);// 边计算for(int j0;jdep[v];j){if(j) ansf[u][j-1]*g[v][j];ansg[u][j1]*f[v][j];}// 边转移for(int j0;jdep[v];j){g[u][j1]f[u][j1]*f[v][j];if(j) g[u][j-1]g[v][j];f[u][j1]f[v][j];}}} int main() {IO;cinn;memset(h,-1,sizeof h);for(int i1;in;i){int u,v;cinuv;add(u,v);add(v,u);}dfs1(1,0);f[1]now;nowdep[1]1;//多开一倍的内存g[1]now;nowdep[1];dfs2(1,0);coutans\n;return 0; }菜菜的我搞了一天这个题啊啊啊啊
http://www.zqtcl.cn/news/143114/

相关文章:

  • 网络推广公司联系昔年下拉网络优化seo
  • 网站开发语言识别网站众筹该怎么做
  • 长春做网站公司长春seo公司云主机和云服务器的区别
  • 打开网站乱码怎么做网件路由器登陆网址
  • wordpress 怎么删除主题seo神马网站推广器
  • 番禺网站推广公司宣传片拍摄方案范本
  • 网站建设的公司收费建筑英才网app
  • 作风建设活动网站知名景观设计公司的官网
  • 网站的模块做网站的图片要多少像素
  • 网站建设需要什么书企信网企业信用信息系统贵州
  • 做网站是什么鬼新浪虚拟主机做网站
  • 青岛网站设计如何做注册网店需要多少费用
  • 空白网站怎么建立网站默认主页设置
  • wordpress外网访问不seo综合查询是什么
  • 曲阜网站建设价格做5173这样的网站要多少人
  • 深圳网站建设服务合同wordpress 增删改查
  • 网站建设好处wordpress评论积分
  • 珠海网站策划网站不能自行备案吗
  • 在vs中做网站如何连接数据库wordpress模板如何安装教程
  • 10g空间网站做视频网站手机网站搜索
  • 服务器上面建设网站网站为什么显示正在建设中
  • 德阳网站优化网络顾问
  • 大淘客可以做几个网站hm网上商城
  • 网站建设分配人员方案呼市网站制作招聘
  • 电商网站建设方案100例用什么做php网站
  • 网站开发设计课程教案南宁网站建设招聘
  • 常州微信网站建设wordpress 中英主题
  • 新零售型网站开发网络营销常用的工具和方法
  • 陕西省建设监理协会网站证书网站建设去哪里找客户
  • 上海网站注销吗如何在wordpress上调用百度地图