题目

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<=5
10^3
对于50%的数据,保证n<=10^5
对于60%的数据,保证n<=410^5
对于70%的数据,保证n<=10^6
对于100%的数据,保证n<=4
106,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第二轮模拟】奶酪相关推荐

  1. JZOJ 5068. 【GDSOI2017第二轮模拟】树

    Description 有n个点,它们从1到n进行标号,第i个点的限制为度数不能超过A[i]. 现在对于每个s (1 <= s <= n),问从这n个点中选出一些点组成大小为s的有标号无根 ...

  2. jzoj 5062.【GDOI2017第二轮模拟day1】航海舰队 fft

    Description Byteasar 组建了一支舰队!他们现在正在海洋上航行着. 海洋可以抽象成一张n×m 的网格图,其中有些位置是".",表示这一格是海水,可以通过:有些位置 ...

  3. GDOI2017第二轮模拟day1 总结

    平民比赛 这场比赛的暴力分非常友好. 但是我并没有拿到全部的暴力分. 1(暴力分\(60/100\)) 暂时我可以拿的暴力分为\(30/100\),直接mst模拟即可. 然而当时打了个辣鸡莫队,结果爆 ...

  4. 【JZOJ5064】【GDOI2017第二轮模拟day2】友好城市 Kosarajo算法+bitset+ST表+分块

    题面 在Byteland 一共有n 座城市,编号依次为1 到n,这些城市之间通过m 条单向公路连接. 对于两座不同的城市a 和b,如果a 能通过这些单向道路直接或间接到达b,且b 也能如此到达a,那么 ...

  5. 【JZOJ B组】【NOIP2013模拟】小喵喵的新家

    Description 小喵喵和小聪聪从小就是好朋友 ,他们经常在一起玩耍 .如今小喵已经厌倦了自己居住的环境,想请小聪聪为她建一个新家. 小喵喵天生多才多艺,对多种乐器颇有研究.对于生活中常见的图形 ...

  6. 【GDOI2017第二轮模拟day1】公路建设

    Description 在Byteland一共有n 个城市,编号依次为1 到n,它们之间计划修建m条双向道路,其中修建第i 条道路的费用为ci. Byteasar作为Byteland 公路建设项目的总 ...

  7. 【JZOJ B组】【NOIP2013模拟9.29】密码

    Description 在又一次消灭林登·万的战斗中,指挥官moreD缴获了一个神奇的盒子.盒子异常的坚固,以至于完全无法摧毁,唯一打开的方式是通过盒上的密码锁. 经过仔细的调查,研究人员一致认为这个 ...

  8. 【JZOJ B组】【NOIP2015模拟10.27】魔道研究

    Description "我希望能使用更多的魔法.不对,是预定能使用啦.最终我要被大家称呼为大魔法使.为此我决定不惜一切努力." --<The Grimoire of Mar ...

  9. NOIP历年第二轮入门组真题集合

    NOIP历年第二轮入门组真题集合 年份 题目 题解链接 2000 T1-计算器的改良 T2- 税收与补贴问题 T3-乘积最大 T4-单词接龙 题解链接 2001 T1-数的记数 T2-最大公约数和最小 ...

最新文章

  1. 关于PKI架构(使用证书)保护Web访问的安全实现SSL的基本理论
  2. IntelliJ IDEA2016 + tomcat 即改即生效 实现热部署
  3. python类的成员函数_Python实现动态添加类的属性或成员函数的解决方法
  4. Music List
  5. JAVA最常用的排序_冒泡排序、选择排序、快速排序
  6. tomcat配置及其中部分目录作用虚拟路径虚拟主机
  7. 算法工程师进化-基础理论
  8. TortoiseSVN 命令 (命令行执行工具)
  9. Java面试题超详细讲解系列之九【SQL语句篇】
  10. 电机学(2) - 变压器
  11. 模式识别 - 名词解释整理
  12. css图片上面加文字透明,CSS实现文字半透明显示在图片上方法
  13. 一行让电脑说话的代码
  14. 自己动手写CPU(8)——简单算术操作指令的实现
  15. 平安产险_杭州平安产险:寒风中靓丽的一抹橙坚守者
  16. GNE: 4行代码实现新闻类网站通用爬虫
  17. uni-app获取省市区详细位置信息
  18. 建群网培PMP每日一练2020-08-13
  19. python:分隔符
  20. Authentication和Authrization(下)

热门文章

  1. win7如何设置共享
  2. 解决Mac使用wine安装的软件中文显示成方块的问题
  3. 新浪php面试题目,PHP新浪面试题全部题目与答案
  4. sysbench服务器性能测试
  5. Bug:paddle:FatalError: `Segmentation fault` is detected by the operating system.
  6. CentOS7 下 MySQL 之 PXC 集群部署【Docker+多机多节点】
  7. 用Python开发基于Mirai框架的QQ机器人-1. 安装与搭建
  8. Unity【XBox One】- 手柄输入的配置与使用
  9. mysql保存和读取微信头像
  10. 机器学习基础(一):简介