[Luogu 1351] NOIP2014 联合权值

<题目链接>


存图,对于每一个点 \(u\),遍历它的所有邻接点。以 \(u\) 为中转点的点对中,\((x,y)\) 的联合权值 \(w_x \cdot w_y\) 最大,当且仅当 \(x\) 与 \(y\) 的点权在 \(u\) 的所有邻接点中是前两大的。

成功尝试内嵌 HTML 控制背景色,开心。

每遍历一个点 \(v\),它对联合权值之和 \(\mathrm{sum}\) 的贡献,等于其点权 \(w_v\) 乘目前已遍历点的点权和 \(\mathrm{NodeSum}\) 再乘 \(2\),即 \(\mathrm{sum} += 2w_v \cdot \mathrm{NodeSum}\)。(取模省略,代码中体现)

然后一边求 \(u\) 的邻接点中的最大点权 \(\mathrm{max1}\) 和次大点权 \(\mathrm{max2}\),一边更新 \(\mathrm{NodeSum}\)(教练跟我说更新这个的过程叫什么前序和优化)。

\(u\) 的邻接点遍历完毕后,\(\mathrm{sum}\) 也更新完毕了。至于最大联合权值 \(\mathrm{ans}\),比较当前 \(\mathrm{ans}\) 与此次遍历求出的 \(\mathrm{max1} \cdot \mathrm{max2}\),更新最大值即可。

最终输出 \(\mathrm{ans}\) 与 \(\mathrm{sum}\) 即可。

  1. #include <algorithm>
  2. #include <cstdio>
  3. using std::max;
  4. const int MAXN=2000010,P=10007;
  5. int n,ans,sum,w[MAXN];
  6. struct Edge
  7. {
  8. int to;
  9. Edge *next;
  10. Edge(int to,Edge* next):to(to),next(next){}
  11. ~Edge(void)
  12. {
  13. if(next!=nullptr)
  14. delete next;
  15. }
  16. }*head[MAXN];
  17. void Initialize(void)
  18. {
  19. for(int i=1;i<=n;++i)
  20. head[i]=nullptr;
  21. }
  22. void AddEdges(int u,int v)
  23. {
  24. head[u]=new Edge(v,head[u]);
  25. head[v]=new Edge(u,head[v]);
  26. }
  27. void Solve(int u)
  28. {
  29. int NodeSum=0,max1=0,max2=0;
  30. for(Edge *i=head[u];i!=nullptr;i=i->next)
  31. {
  32. int v=i->to;
  33. sum=(sum+(NodeSum*w[v]<<1))%P;
  34. if(max1<w[v])
  35. {
  36. max2=max1;
  37. max1=w[v];
  38. }
  39. else
  40. max2=max(max2,w[v]);
  41. NodeSum=(NodeSum+w[v])%P;
  42. }
  43. ans=max(ans,max1*max2);
  44. }
  45. void Destroy(void)
  46. {
  47. for(int i=1;i<=n;++i)
  48. delete head[i];
  49. }
  50. int main(int argc,char** argv)
  51. {
  52. scanf("%d",&n);
  53. for(int i=1,u,v;i<n;++i)
  54. {
  55. scanf("%d %d",&u,&v);
  56. AddEdges(u,v);
  57. }
  58. for(int i=1;i<=n;++i)
  59. scanf("%d",&w[i]);
  60. for(int i=1;i<=n;++i)
  61. Solve(i);
  62. printf("%d %d\n",ans,sum);
  63. return 0;
  64. }

谢谢阅读。

[Luogu 1351] NOIP2014 联合权值的更多相关文章

  1. NOIP2014 联合权值

    2.联合权值 (link.cpp/c/pas) [问题描述] 无向连通图G有n个点,n-1条边.点从1到n依次编号,编号为i的点的权值为Wi  ,每条边的长度均为1.图上两点(u, v)的距离定义为u ...

  2. 【洛谷P1351】[NOIP2014]联合权值

    联合权值 题目链接 首先,直接两重循环暴力枚举得了70分 然后发现第二重循环可以记忆化一下 记忆一下每个点的子节点的权值和.最大值. 次大值(为了处理该点的父节点权值恰好为最大值) 具体看代码 #in ...

  3. NOIP2014联合权值

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

  4. [NOIP2014]联合权值 题解

    题目大意: 有一棵树,求距离为2的点权的乘积的和以及最大值. 思路: 枚举每一个点,则与其相邻的点互为距离为2的点.该部分的最大值为点权最大的两个点的积,和为点的权值和的平方减去每个点的平方,这样每条 ...

  5. luogu1351 [NOIp2014]联合权值 (dfs)

    有两种情况:一个点到它的父亲的父亲(要算两次).一个点的子节点之间互相到达 #include<bits/stdc++.h> #define pa pair<int,int> # ...

  6. NOIP 2004 联合权值

    洛谷 P1351 联合权值 洛谷传送门 JDOJ 2886: [NOIP2014]联合权值 D1 T2 JDOJ传送门 Description 无向连通图 G有 n个点,n-1条边.点从 1到 n依次 ...

  7. Luogu 1351 NOIP 2014 联合权值(贪心,计数原理)

    Luogu 1351 NOIP 2014 联合权值(贪心,计数原理) Description 无向连通图 G 有 n 个点,n-1 条边.点从 1 到 n 依次编号,编号为 i 的点的权值为 Wi, ...

  8. luogu 1351 联合权值

    联合权值 题目大意 给你一个图,有\(n-1\)条边,距离均为\(1\),每距离为\(2\)的两个点的联合权值为\(W_u \times W_v\),求联合权值的最大值和联合权值总和. solutio ...

  9. [NOIp2014] luogu P1351 联合权值

    哎我博 4 了. 题目描述 无向连通图 GGG 有 nnn 个点,n−1n−1n−1 条边.点从 111 到 nnn 依次编号,编号为 iii 的点的权值为 WiW_iWi​,每条边的长度均为 111 ...

随机推荐

  1. Floyd算法(原理|代码实现)

    http://www.cnblogs.com/twjcnblog/archive/2011/09/07/2170306.html 正如我们所知道的,Floyd算法用于求最短路径.Floyd算法可以说是 ...

  2. erlang驱动使用mysql-otp

    Magnus Ahltorp的Mysql Driver里面介绍emysql的缺陷: 1. 隔离不够好, 2.不能伸缩 mysql-otp使用1个进程1个mysql连接,隔离得很好.推荐使用. mysq ...

  3. QSettings配置读写-win注册表操作-ini文件读写

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QSettings配置读写-win注册表操作-ini文件读写     本文地址:http:// ...

  4. 测试——约跑APP

    项目名:约跑APP 用户需求规格说明书URL:http://www.cnblogs.com/liquan/p/6071804.html 组长博客URL:http://www.cnblogs.com/l ...

  5. java 基础 --final--008

    finally:被finally控制的语句一定会执行,但是如果执行之前jvm退出了,就不会执行了.比如System.exit(0);final:常见的可以修饰类(该类不能被继承) 方法(方法不能被重写 ...

  6. CCSDS标准的LDPC编译码仿真

    html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...

  7. angularjs 常用功能练习

    <!DOCTYPE html> <html ng-app="app"> <head> <meta charset="utf-8& ...

  8. HDU4786_Fibonacci Tree

    题目很新颖的,略带智商,很好. 题目的意思是给你一些白色边和黑色边,现在问你能否用两色边构造出一颗生成树,且树中白色边的数量为一个Fibonacci数. 其实在没做题目之前我就已经听说了这个题目的解题 ...

  9. 51nod-1220-约数之和

    题意 求 \[ \sum _{i=1}^n\sum _{j=1}^nd(ij) \\ d(x)=\sum _{e|x}e \] \(n\le 10^9\) . 分析 没有推出来.这题有几个要点要学习. ...

  10. 【uoj#175】新年的网警 结论题+Hash

    题目描述 给出一张 $n$ 个点 $m$ 条边的无向连通图,每条边的边权为1.对于每个点 $i$ ,问是否存在另一个点 $j$ ,使得对于任意一个不为 $i$ 或 $j$ 的点 $k$ ,$i$ 到 ...