【题解】

  每个点维护各个儿子的前后缀最大值、权值和,这样就可以统计儿子之间相乘的答案。然后每个节点再乘它的祖父的权值去更新答案即可。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #define LL long long
 5 #define rg register
 6 #define N 200010
 7 #define Mod (10007)
 8 using namespace std;
 9 int n,tot,last[N],fa[N],w[N],son[N];
10 LL Sum,Mx;
11 struct edge{int to,pre;}e[N<<1];
12 inline int read(){
13     int k=0,f=1; char c=getchar();
14     while(c<'0'||c>'9')c=='-'&&(f=-1),c=getchar();
15     while('0'<=c&&c<='9')k=k*10+c-'0',c=getchar();
16     return k*f;
17 }
18 void dfs(int x){
19     Mx=max(Mx,1ll*w[x]*w[fa[fa[x]]]);
20     Sum+=2*w[x]*w[fa[fa[x]]]; Sum%=Mod;
21     LL s=0,premx=-2e9; int top=0;
22     for(rg int i=last[x],to;i;i=e[i].pre)if((to=e[i].to)!=fa[x]){
23         fa[to]=x; s+=w[to]; son[++top]=to;
24         Mx=max(Mx,premx*w[to]); premx=max(premx,1ll*w[to]);
25     }
26     premx=-2e9;
27     for(rg int i=top,to;i;i--){
28         Mx=max(Mx,premx*w[to=son[i]]); premx=max(premx,1ll*w[to]);
29         Sum+=w[to]*(s-w[to]); Sum%=Mod;
30     }
31     for(rg int i=last[x],to;i;i=e[i].pre)if((to=e[i].to)!=fa[x]) dfs(to);
32 }
33 int main(){
34     n=read();
35     for(rg int i=1;i<n;i++){
36         int u=read(),v=read();
37         e[++tot]=(edge){u,last[v]}; last[v]=tot;
38         e[++tot]=(edge){v,last[u]}; last[u]=tot;
39     }
40     for(rg int i=1;i<=n;i++) w[i]=read();
41     dfs(1);
42     printf("%lld %lld\n",Mx,Sum%Mod);
43 }

转载于:https://www.cnblogs.com/DriverLao/p/9894011.html

洛谷 1351 联合权值相关推荐

  1. 洛谷 1351 联合权值——树形dp

    题目:https://www.luogu.org/problemnew/show/P1351 对拍了一下,才发现自己漏掉了那种拐弯的情况. #include<iostream> #incl ...

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

    题意 题目链接 Sol 一道很简单的树形dp,然而被我写的这么长 分别记录下距离为\(1/2\)的点数,权值和,最大值.以及相邻儿子之间的贡献. 树形dp一波.. #include<bits/s ...

  3. [Luogu 1351] NOIP2014 联合权值

    [Luogu 1351] NOIP2014 联合权值 存图,对于每一个点 \(u\),遍历它的所有邻接点.以 \(u\) 为中转点的点对中,\((x,y)\) 的联合权值 \(w_x \cdot w_ ...

  4. 联合权值 NOIP2014 提高组 Day1 T2

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

  5. NOIp 2014 #2 联合权值 Label:图论 !!!未AC

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

  6. [NOIP2014]联合权值

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

  7. 【学术篇】luogu1351[NOIP2014 提高组]联合权值

    一道提高组的题..... 传送门:题目在这里.... 现在都懒得更自己的blog了,怕是太颓废了_ (:з」∠) _ 好久没做题了,手都生了.(好吧其实是做题方面手太生了) 这题我都不想讲了,把代码一 ...

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

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

  9. NOIP 2014 联合权值

    题目链接: https://www.luogu.org/problemnew/show/P1351 参考洛谷题解: 使用链式前向星储存图.如果使用深度优先搜索的话,是会超时的,如果遍历中间的点,虽然比 ...

最新文章

  1. QQ2009任务栏的QQ图标怎么隐藏
  2. docker artifactory-jcr
  3. NGINX配置基于Node.js服务的负载均衡服务器
  4. 一些算法(最短路,线段树,01,完全背包,STL)的基本参考资料
  5. Jsp之我遇到过的中文乱码问题和解决方法
  6. android实现水平进度条_Flutter在线视频播放功能实现(chewie库)
  7. linux普通用户id一般是,实际用户ID和有效用户ID (一) *****
  8. 与Maggy统一单主机和分布式机器学习
  9. DDoS攻击重大历史事件
  10. 城市信息学其二-城市人类动力学
  11. 交叉电缆与以太网电缆有哪些区别之处,弱电工程师必知!
  12. Java 笔试强训 牛客网选择编程题 02
  13. 【Python百日进阶-Web开发-Feffery】Day418 - fac实例:dash+fac登录-Sqlite数据库
  14. 组织行为学笔记(3)——情绪和心情
  15. 【有问不答】非白色光斑的检测(单个实例)
  16. 刷屏!日本内政部向国民宣传5G的短视频:未来将是这样!
  17. FMDB 的简单说明
  18. 有道云笔记Markdown(一)
  19. 现在啥软件都有开源,BI 呢?干货推荐
  20. 前端团队代码规范最佳实践,个人成长必备!

热门文章

  1. 浅谈javascript中的数据类型和引用类型
  2. [置顶] 我整理的一些常用网址
  3. Silverlight游戏设计(Game Design):(四)从零开始搭建游戏主体框架
  4. [ASP.NET入门随想七]主角与配角——OO思想的多态、接口与委托
  5. LaTeX入门第三集!LaTeX的几个应用!
  6. python编程大赛队名_【推荐】程序员团队名称和口号word版本 (12页)
  7. mysql语句大全 新浪博客_MySQL语句入门
  8. spark sql 上个月_SPARK-SQL内置函数之时间日期类
  9. uniapp手写_手写签名
  10. im即时通讯源码_IM消息ID技术专题(六):深度解密滴滴的高性能ID生成器(Tinyid)