【JZOJ B组】【GDSOI2017第二轮模拟】奶酪
题目
Description
CJY很喜欢吃奶酪,于是YJC弄到了一些奶酪,现在YJC决定和CJY分享奶酪。
YJC弄到了n-1块奶酪,于是他把奶酪挂在了一棵n个结点的树上,每根树枝上挂一块奶酪,每块奶酪都有重量。
YJC和CJY决定这样分奶酪:首先砍掉一根树枝,把树分成两部分,每人取一部分,然后各自在自己取的那部分树上选择一条路径并取走路径上的奶酪,然后把剩下的奶酪拿去喂老鼠。
两人都想让自己取走总重量尽量大的奶酪,但他们不知道砍掉哪一根树枝最好。所以他们想让你计算,对于每一根树枝,砍掉之后每个人取走的奶酪的总重量的最大值。
Input
第一行一个正整数n,表示树的点数。
接下来的n-1行每行有三个数u,v,w,表示有一根树枝连接u和v,挂在上面的奶酪的重量为w。
Output
对于第i根树枝(从1开始标号),你将会得到2个答案Pi和Qi,我们令ansi=max(Pi,Qi)23333+min(Pi,Qi)2333+233ii+23*i+2,为了缩短输出答案时间,请只输出一个数S表示所有ansi的和对2333333333333333取模的值。
Sample Input
10
1 2 234
2 9 936
9 5 784
5 3 105
2 8 775
8 10 368
10 6 1003
9 4 670
4 7 417
Sample Output
735923484
Data Constraint
对于10%的数据,保证n<=310^2。
对于30%的数据,保证n<=510^3
对于50%的数据,保证n<=10^5
对于60%的数据,保证n<=410^5
对于70%的数据,保证n<=10^6
对于100%的数据,保证n<=4106,w<=106
思路
一个比较经典的树形DP,主要处理好子树的几个最大值
但是我在考场上只拿了10分,一开始找不到原因,结果是i没开longlong见了祖宗……
代码
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll inf=0x7fffffff,N=4e6+77,mod=2333333333333333;
ll n,bz[N],id,ls[N],to[N*2],next[N*2],val[N*2],cnt=1,tmb,ban;
ll f[N],g[N],h[N],yjy[N],yjyx[N],yjyxx[N],faii[N],F[N],aii[N];
ll ans,ans1,ans2;
struct E
{int to,next,v;
}e[N*2];
void add(ll u,ll v,ll val)
{e[++cnt].to=v; e[cnt].next=ls[u]; ls[u]=cnt; e[cnt].v=val;
}
void dfs(ll u,ll fa)
{for(int i=ls[u]; i; i=e[i].next)if(e[i].to!=fa){faii[e[i].to]=u;dfs(e[i].to,u);yjy[u]=max(yjy[e[i].to],yjy[u]);ll tmp=f[e[i].to]+e[i].v;if(tmp>=f[u]){h[u]=g[u];g[u]=f[u];f[u]=tmp;}else if(tmp>=g[u]){h[u]=g[u];g[u]=tmp;}else if(tmp>=h[u]) h[u]=tmp;if(yjy[e[i].to]>=yjyx[u]){yjyxx[u]=yjyx[u];yjyx[u]=yjy[e[i].to];}else if(yjy[e[i].to]>=yjyxx[u]) yjyxx[u]=yjy[e[i].to];}yjy[u]=max(yjy[u],f[u]+g[u]);
}
void dfs2(ll u,ll fa)
{for(int i=ls[u]; i; i=e[i].next)if(e[i].to!=fa){aii[e[i].to]=aii[u];if(yjy[e[i].to]==yjyx[u]) aii[e[i].to]=max(aii[e[i].to],yjyxx[u]);else aii[e[i].to]=max(aii[e[i].to],yjyx[u]);if(f[u]==f[e[i].to]+e[i].v){F[e[i].to]=max(F[u]+e[i].v,g[u]+e[i].v);aii[e[i].to]=max(aii[e[i].to],g[u]+max(h[u],F[u]));}else{F[e[i].to]=max(F[u]+e[i].v,f[u]+e[i].v);if(g[u]==f[e[i].to]+e[i].v) aii[e[i].to]=max(aii[e[i].to],f[u]+max(h[u],F[u]));else aii[e[i].to]=max(aii[e[i].to],f[u]+max(g[u],F[u]));}dfs2(e[i].to,u);}
}int main()
{freopen("cheese.in","r",stdin); freopen("cheese.out","w",stdout);scanf("%d",&n);for(int i=1,x,y,z; i<n; i++) scanf("%d%d%d",&x,&y,&z),add(x,y,z),add(y,x,z);dfs(1,0);dfs2(1,0);for(ll i=1; i<n; i++){if(i==3036){// printf("***\n");}ll u=e[i*2+1].to,v=e[i*2].to;if(faii[v]==u) swap(u,v);ans1=yjy[u];ans2=aii[u];ans=(ans+max(ans1,ans2)*23333+min(ans2,ans1)*2333+233*i*i+23*i+2)%mod;
// printf("%lld %lld %lld\n",ans1,ans2,ans);}printf("%lld",ans);
}
【JZOJ B组】【GDSOI2017第二轮模拟】奶酪相关推荐
- JZOJ 5068. 【GDSOI2017第二轮模拟】树
Description 有n个点,它们从1到n进行标号,第i个点的限制为度数不能超过A[i]. 现在对于每个s (1 <= s <= n),问从这n个点中选出一些点组成大小为s的有标号无根 ...
- jzoj 5062.【GDOI2017第二轮模拟day1】航海舰队 fft
Description Byteasar 组建了一支舰队!他们现在正在海洋上航行着. 海洋可以抽象成一张n×m 的网格图,其中有些位置是".",表示这一格是海水,可以通过:有些位置 ...
- GDOI2017第二轮模拟day1 总结
平民比赛 这场比赛的暴力分非常友好. 但是我并没有拿到全部的暴力分. 1(暴力分\(60/100\)) 暂时我可以拿的暴力分为\(30/100\),直接mst模拟即可. 然而当时打了个辣鸡莫队,结果爆 ...
- 【JZOJ5064】【GDOI2017第二轮模拟day2】友好城市 Kosarajo算法+bitset+ST表+分块
题面 在Byteland 一共有n 座城市,编号依次为1 到n,这些城市之间通过m 条单向公路连接. 对于两座不同的城市a 和b,如果a 能通过这些单向道路直接或间接到达b,且b 也能如此到达a,那么 ...
- 【JZOJ B组】【NOIP2013模拟】小喵喵的新家
Description 小喵喵和小聪聪从小就是好朋友 ,他们经常在一起玩耍 .如今小喵已经厌倦了自己居住的环境,想请小聪聪为她建一个新家. 小喵喵天生多才多艺,对多种乐器颇有研究.对于生活中常见的图形 ...
- 【GDOI2017第二轮模拟day1】公路建设
Description 在Byteland一共有n 个城市,编号依次为1 到n,它们之间计划修建m条双向道路,其中修建第i 条道路的费用为ci. Byteasar作为Byteland 公路建设项目的总 ...
- 【JZOJ B组】【NOIP2013模拟9.29】密码
Description 在又一次消灭林登·万的战斗中,指挥官moreD缴获了一个神奇的盒子.盒子异常的坚固,以至于完全无法摧毁,唯一打开的方式是通过盒上的密码锁. 经过仔细的调查,研究人员一致认为这个 ...
- 【JZOJ B组】【NOIP2015模拟10.27】魔道研究
Description "我希望能使用更多的魔法.不对,是预定能使用啦.最终我要被大家称呼为大魔法使.为此我决定不惜一切努力." --<The Grimoire of Mar ...
- NOIP历年第二轮入门组真题集合
NOIP历年第二轮入门组真题集合 年份 题目 题解链接 2000 T1-计算器的改良 T2- 税收与补贴问题 T3-乘积最大 T4-单词接龙 题解链接 2001 T1-数的记数 T2-最大公约数和最小 ...
最新文章
- 关于PKI架构(使用证书)保护Web访问的安全实现SSL的基本理论
- IntelliJ IDEA2016 + tomcat 即改即生效 实现热部署
- python类的成员函数_Python实现动态添加类的属性或成员函数的解决方法
- Music List
- JAVA最常用的排序_冒泡排序、选择排序、快速排序
- tomcat配置及其中部分目录作用虚拟路径虚拟主机
- 算法工程师进化-基础理论
- TortoiseSVN 命令 (命令行执行工具)
- Java面试题超详细讲解系列之九【SQL语句篇】
- 电机学(2) - 变压器
- 模式识别 - 名词解释整理
- css图片上面加文字透明,CSS实现文字半透明显示在图片上方法
- 一行让电脑说话的代码
- 自己动手写CPU(8)——简单算术操作指令的实现
- 平安产险_杭州平安产险:寒风中靓丽的一抹橙坚守者
- GNE: 4行代码实现新闻类网站通用爬虫
- uni-app获取省市区详细位置信息
- 建群网培PMP每日一练2020-08-13
- python:分隔符
- Authentication和Authrization(下)
热门文章
- win7如何设置共享
- 解决Mac使用wine安装的软件中文显示成方块的问题
- 新浪php面试题目,PHP新浪面试题全部题目与答案
- sysbench服务器性能测试
- Bug:paddle:FatalError: `Segmentation fault` is detected by the operating system.
- CentOS7 下 MySQL 之 PXC 集群部署【Docker+多机多节点】
- 用Python开发基于Mirai框架的QQ机器人-1. 安装与搭建
- Unity【XBox One】- 手柄输入的配置与使用
- mysql保存和读取微信头像
- 机器学习基础(一):简介