洛谷 1351 联合权值
【题解】
每个点维护各个儿子的前后缀最大值、权值和,这样就可以统计儿子之间相乘的答案。然后每个节点再乘它的祖父的权值去更新答案即可。
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 联合权值相关推荐
- 洛谷 1351 联合权值——树形dp
题目:https://www.luogu.org/problemnew/show/P1351 对拍了一下,才发现自己漏掉了那种拐弯的情况. #include<iostream> #incl ...
- 洛谷P1351 联合权值(树形dp)
题意 题目链接 Sol 一道很简单的树形dp,然而被我写的这么长 分别记录下距离为\(1/2\)的点数,权值和,最大值.以及相邻儿子之间的贡献. 树形dp一波.. #include<bits/s ...
- [Luogu 1351] NOIP2014 联合权值
[Luogu 1351] NOIP2014 联合权值 存图,对于每一个点 \(u\),遍历它的所有邻接点.以 \(u\) 为中转点的点对中,\((x,y)\) 的联合权值 \(w_x \cdot w_ ...
- 联合权值 NOIP2014 提高组 Day1 T2
codevs 3728 联合权值 题目描述 无向连通图G 有n 个点,n - 1 条边.点从1 到n 依次编号,编号为 i 的点的权值为W i ,每条边的长度均为1 .图上两点( u , v ) 的距 ...
- NOIp 2014 #2 联合权值 Label:图论 !!!未AC
题目描述 无向连通图G 有n 个点,n - 1 条边.点从1 到n 依次编号,编号为 i 的点的权值为W i ,每条边的长度均为1 .图上两点( u , v ) 的距离定义为u 点到v 点的最短距离. ...
- [NOIP2014]联合权值
NOIp2014提高组 [题目描述] 无向连通图G 有n 个点,n - 1 条边.点从1 到n 依次编号,编号为 i 的点的权值为W i ,每条边的长度均为1 .图上两点( u , v ) 的距 ...
- 【学术篇】luogu1351[NOIP2014 提高组]联合权值
一道提高组的题..... 传送门:题目在这里.... 现在都懒得更自己的blog了,怕是太颓废了_ (:з」∠) _ 好久没做题了,手都生了.(好吧其实是做题方面手太生了) 这题我都不想讲了,把代码一 ...
- P1351 联合权值[鬼畜解法]
题目描述 无向连通图 G 有 n 个点,n−1 条边.点从 1 到 n 依次编号,编号为 i 的点的权值为 Wi,每条边的长度均为 1.图上两点 (u,v) 的距离定义为 u 点到 v 点的最短距离 ...
- NOIP 2014 联合权值
题目链接: https://www.luogu.org/problemnew/show/P1351 参考洛谷题解: 使用链式前向星储存图.如果使用深度优先搜索的话,是会超时的,如果遍历中间的点,虽然比 ...
最新文章
- QQ2009任务栏的QQ图标怎么隐藏
- docker artifactory-jcr
- NGINX配置基于Node.js服务的负载均衡服务器
- 一些算法(最短路,线段树,01,完全背包,STL)的基本参考资料
- Jsp之我遇到过的中文乱码问题和解决方法
- android实现水平进度条_Flutter在线视频播放功能实现(chewie库)
- linux普通用户id一般是,实际用户ID和有效用户ID (一) *****
- 与Maggy统一单主机和分布式机器学习
- DDoS攻击重大历史事件
- 城市信息学其二-城市人类动力学
- 交叉电缆与以太网电缆有哪些区别之处,弱电工程师必知!
- Java 笔试强训 牛客网选择编程题 02
- 【Python百日进阶-Web开发-Feffery】Day418 - fac实例:dash+fac登录-Sqlite数据库
- 组织行为学笔记(3)——情绪和心情
- 【有问不答】非白色光斑的检测(单个实例)
- 刷屏!日本内政部向国民宣传5G的短视频:未来将是这样!
- FMDB 的简单说明
- 有道云笔记Markdown(一)
- 现在啥软件都有开源,BI 呢?干货推荐
- 前端团队代码规范最佳实践,个人成长必备!
热门文章
- 浅谈javascript中的数据类型和引用类型
- [置顶] 我整理的一些常用网址
- Silverlight游戏设计(Game Design):(四)从零开始搭建游戏主体框架
- [ASP.NET入门随想七]主角与配角——OO思想的多态、接口与委托
- LaTeX入门第三集!LaTeX的几个应用!
- python编程大赛队名_【推荐】程序员团队名称和口号word版本 (12页)
- mysql语句大全 新浪博客_MySQL语句入门
- spark sql 上个月_SPARK-SQL内置函数之时间日期类
- uniapp手写_手写签名
- im即时通讯源码_IM消息ID技术专题(六):深度解密滴滴的高性能ID生成器(Tinyid)