联合权值

                洛谷中可找到


题目传送门https://www.luogu.org/problemnew/show/P1351

这题我就得了70分(TLE)  GG了

就是遍历它孩子的孩子(爷爷和孙子),然后相乘;

ps:这样会有很多重复,TLE

  1. #include<cstdio>
  2. #include<iostream>
  3. #define maxn 200000+10
  4. using namespace std;
  5. int max(int x,int y)
  6. {
  7. return x>y?x:y;
  8. }
  9. int n;
  10. struct ii{
  11. int u,v,nxt;
  12. }a[maxn*];
  13. int w[maxn];
  14. int head[maxn];
  15. int o;
  16. inline void add(int x,int y)
  17. {
  18. a[++o].u=x;
  19. a[o].v=y;
  20. a[o].nxt=head[x];
  21. head[x]=o;
  22. }
  23. int main()
  24. {
  25. // freopen("link.in","r",stdin);
  26. // freopen("link".out,"w",stdout);
  27. scanf("%d",&n);
  28. for(int i=,x,y;i<n;++i)
  29. {
  30. scanf("%d%d",&x,&y);
  31. add(x,y);
  32. add(y,x);
  33. }
  34. for(int i=;i<=n;++i)
  35. scanf("%d",&w[i]);
  36. int jl=;
  37. int zui=,he=,wkk=;
  38. for(int i=;i<=n;++i)
  39. {
  40. for(int j=head[i];j;j=a[j].nxt)
  41. {
  42. for(int zz=head[a[j].v];zz;zz=a[zz].nxt)
  43. {
  44. if(a[zz].v!=i)
  45. {
  46. wkk=w[a[zz].v]*w[i];
  47. zui=max(zui,wkk);
  48. he+=wkk;
  49. he%=;
  50. }
  51. }
  52. }
  53. }
  54. printf("%d %d",zui,he);
  55. return ;
  56. }


正解

  1. #include<iostream>
  2. #include<cstdio>
  3. #define maxn 300000+10
  4. using namespace std;
  5. int n;
  6. int max(int x,int y)
  7. {
  8. return x>y?x:y;
  9. }//手写max,fast
  10.  
  11. struct ii{
  12. int v,nxt;
  13. }a[];//链式强向星存图1
  14. int head[];
  15. int w[];
  16. int he,ma;//ans
  17.  
  18. int o;//存图
  19. void add(int x,int y)
  20. {
  21. a[++o].v=y;
  22. a[o].nxt=head[x];
  23. head[x]=o;
  24. }
  25.  
  26. int main()
  27. {
  28. cin>>n;
  29. int x,y;
  30. for(int i=;i<=n-;++i)
  31. {
  32. scanf("%d%d",&x,&y);//输入
  33. add(x,y);add(y,x);//正反存一遍
  34. }
  35. for(int i=;i<=n;++i)
  36. {
  37. scanf("%d",&w[i]);//输入价值
  38. }
  39. int sum,zui;//sum是孩子加起来的和,zui是孩子中最大的
  40. for(int i=;i<=n;++i)
  41. {
  42. sum=(zui=w[a[head[i]].v])%;//初始值
  43. for(int j=a[head[i]].nxt;j;j=a[j].nxt)//从第二个孩子开始遍历
  44. {
  45. //这一部分是求和
  46. he=(he+sum*w[a[j].v])%;//乘法结合律
  47. sum=(sum+w[a[j].v])%;//更新孩子和
  48. //这一部分是求最大值
  49. ma=max(ma,zui*w[a[j].v]);//更新最大值
  50. zui=max(zui,w[a[j].v]);//更新孩子中的最大值
  51. //因为这是最后更新的,所以不用担心出现最大值和自己相乘
  52. }
  53. }
  54.  
  55. printf("%d %d",ma,he*%);//别忘了he*2
  56. return ;
  57. }

联合权值dp的更多相关文章

  1. 【NOIP2014】联合权值 树上dp

    题目描述 Description 无向连通图G 有n 个点,n - 1 条边.点从1 到n 依次编号,编号为 i 的点的权值为W i   ,每条边的长度均为1 .图上两点( u ,  v ) 的距离定 ...

  2. P1351 联合权值(树形dp)

    P1351 联合权值 想刷道水题还交了3次.....丢人 (1.没想到有两个点都是儿子的状况 2.到处乱%(大雾)) 先dfs一遍处理出父亲$fa[x]$ 蓝后再一遍dfs,搞搞就出来了. #incl ...

  3. 【树形DP】【P1351】 【NOIP2014D1T2】联合权值

    传送门 Description 无向连通图 \(G\) 有 \(n\) 个点, \(n-1\) 条边.点从 \(1\) 到 \(n\) 依次编号,编号为 \(i\) 的点的权值为 \(W_i\) ,每 ...

  4. NOIP2014提高组 联合权值(距离为2的树形dp)

    联合权值 题目描述 无向连通图 GG 有 nn 个点,n-1n−1 条边.点从 11 到 nn 依次编号,编号为 ii 的点的权值为 W_iWi​,每条边的长度均为 11.图上两点 (u, v)(u, ...

  5. Vijos1906 联合权值 NOIP2014Day1T2 树形动态规划

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - Vijos1906 题意概括 有一棵树,每一个节点都有一个权值w[i].下面说的x,y都是该树中的节点. 对于 ...

  6. [noip2014day1-T2]联合权值

    无向连通图 G 有 n 个点,n-1 条边.点从 1 到 n 依次编号,编号为 i 的点的权值为 Wi,每条边的长度均为 1.图上两点(u, v)的距离定义为 u 点到 v 点的最短距离.对于图 G ...

  7. 「NOIP2014」「Codevs3728」 联合权值(乱搞

    3728 联合权值 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold   题目描述 Description 输入描述 Input Description 输出描述 Ou ...

  8. P1351 联合权值[鬼畜解法]

    题目描述 无向连通图 G 有 n 个点,n−1 条边.点从 1 到 n 依次编号,编号为 i 的点的权值为 Wi​,每条边的长度均为 1.图上两点 (u,v) 的距离定义为 u 点到 v 点的最短距离 ...

  9. Codevs 3728 联合权值

    问题描述 无向连通图G有n个点,n-1条边.点从1到n依次编号,编号为i的点的权值为Wi ,每 条边的长度均为1.图上两点(u,v)的距离定义为u点到v点的最短距离.对于图G上的点 对(u,v),若它 ...

随机推荐

  1. CH0103 最短Hamilton路径 dp

    正解:状压dp 解题报告: 完了吃枣退役:D 我是真的没想到这是个dp...脑子越来越不好了,大概是太久没碰OI了都要生疏了...哭了,感觉自己太傻逼了可能不适合学信息... 知道是个状压dp就eas ...

  2. 聊一聊Linux中的工作队列

    2018-01-18 工作队列是Linux内核中把工作延迟执行的一种手段,其目的不同于软中断,软中断是提高CPU的响应,尽可能的缩短关中断的时间:而工作队列主要目的是节省资源,其比较适合很微小的任务, ...

  3. JS闭包中的循环绑定处理程序

    前几天工作中写前端js代码时,遇到了遍历元素给它添加单击事件.就是这个问题让我整整调了一个下午.最后还是下班回家,上网查资料才知道怎么解决的. (PS:之前也在<jQuery基础教程>第四 ...

  4. python-面向对象-08_多态

    多态 目标 多态 面向对象三大特性 封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 中 定义类的准则 继承 实现代码的重用,相同的代码不需要重复的编写 设计类的技巧 子类针对自己特有的需 ...

  5. (3.1)mysql基础深入——mysql二进制与源码目录结构介绍

    (3.1)mysql基础深入——mysql二进制与源码目录结构介绍 关键字:二进制目录结构,源码目录结构(编译安装目录结构) 1.二进制安装程序目录结构 [1] BIN -- mysql的可执行文件( ...

  6. LINUX的前后台程序查看切换

    1.在Linux终端运行命令的时候,在命令末尾加上 & 符号,就可以让程序在后台运行 root@Ubuntu$ ./tcpserv01 & 2.如果程序正在前台运行,可以使用 Ctrl ...

  7. CentOS工作内容(一)CentOS6.4的安装 hwclock和date

    CentOS工作内容(一)CentOS6.4的安装 hwclock和date 光碟安装 分配20G磁盘空间 插入光碟 选择第一项安装 如果要急救的话请选择第三项 启动安装进程 跳过光碟检测 选择nex ...

  8. Python一键安装全部依赖包

    requirements.txt用来记录项目所有的依赖包和版本号,只需要一个简单的pip命令就能完成. pip freeze >requirements.txt 然后就可以用 pip insta ...

  9. python中关于不执行if __name__ == '__main__':测试模块的解决

    1.新建测试脚本文件: 2.编辑测试脚本 import unittest import requests import json import HTMLTestRunner ur1 = 'http:/ ...

  10. STL学习笔记--特殊容器

    容器配接器 (1) stack 栈 后进先出(LIFO), 头文件#include<stack> template<class _Ty, class _Container = deq ...