ZJOI2018历史

20 篇文章 0 订阅
2 篇文章 0 订阅

题意

九条可怜是一个热爱阅读的女孩子。

这段时间,她看了一本非常有趣的小说,这本小说的架空世界引起了她的兴趣。

这个世界有 n n n 个城市,这 n n n 个城市被恰好 n − 1 n − 1 n1 条双向道路联通,即任意两个城市都可以互相到达。同时城市 1 1 1 坐落在世界的中心,占领了这个城市就称霸了这个世界。

在最开始,这 n n n 个城市都不在任何国家的控制之下,但是随着社会的发展,一些城市会崛起形成国家并夺取世界的霸权。为了方便,我们标记第 i i i 个城市崛起产生的国家为第 i i i 个国家。

在第 i i i 个城市崛起的过程中,第 i i i 个国家会取得城市 i i i 到城市 1 1 1 路径上所有城市的控制权。新的城市的崛起往往意味着战争与死亡,若第 i i i 个国家在崛起中,需要取得一个原本被国家 j ( j ≠ i ) j(j \ne i) j(j=i) 控制的城市的控制权,那么国家 i i i 就必须向国家 j j j 宣战并进行战争。

现在,可怜知道了,在历史上,第 i i i 个城市一共崛起了 a i a_i ai 次。但是这些事件发生的相对顺序已经无从考究了,唯一的信息是,在一个城市崛起称霸世界之前,新的城市是不会崛起的。

战争对人民来说是灾难性的。可怜定义一次崛起的灾难度为崛起的过程中会和多少不同的国家进行战争(和同一个国家进行多次战争只会被计入一次)。可怜想要知道,在所有可能的崛起顺序中,灾难度之和最大是多少。

同时,在考古学家的努力下,越来越多的历史资料被发掘了出来,根据这些新的资料,可
怜会对 a i a_i ai 进行一些修正。具体来说,可怜会对 a i a_i ai 进行一些操作,每次会将 a x a_x ax 加上 w w w。她希望
在每次修改之后,都能计算得到最大的灾难度。

然而可怜对复杂的计算并不感兴趣,因此她想让你来帮她计算一下这些数值。

对题面的一些补充:

  • 同一个城市多次崛起形成的国家是同一个国家,这意味着同一个城市连续崛起两次是不会和任何国家开战的:因为这些城市原来就在它的控制之下。
  • 在历史的演变过程中,第 i i i 个国家可能会有一段时间没有任何城市的控制权。但是这并不意味着第 i i i 个国家灭亡了,在城市 i i i 崛起的时候,第 i i i 个国家仍然会取得 1 1 1 i i i 路径上的城市的控制权。

范围

测试点 n n n m m m其他约定
1 ≤ 10 \le 10 10 = 0 =0 =0 a i = 1 a_i=1 ai=1
2-3 ≤ 150000 \le 150000 150000 ≤ 150000 \le 150000 150000 i i i 条道路连接 i i i i + 1 i + 1 i+1
4-5 ≤ 150000 \le 150000 150000 = 0 =0 =0-
6-8 ≤ 150000 \le 150000 150000 ≤ 150000 \le 150000 150000-
9-10 ≤ 4 × 1 0 5 \le 4 \times 10^5 4×105 ≤ 4 × 1 0 5 \le 4\times 10^5 4×105-

题解:
先考虑不修改怎么做:如果每次考虑一条路径的贡献,则难以用正确的贪心策略解决和计算;不妨换个角度,考虑每个点的贡献:一个点造成贡献当且仅当这个点是相邻发生战争的两个城市的lca,要使这个点上尽可能多地发生战争,就要使每次经过这个点的城市造成贡献,即连续两个点在不同子树内(这个点和这个点的子树算不同子树),于是转化为一个经典显然的问题:若有一个子树大小过半,则只能使其它子树之间穿插这个子树,否则相邻的都可以产生贡献,于是树形DP即可。
考虑对于一个点增加,只会影响它到根的路径上,是否有子树过半的情况发生变化的那些点的DP值,设s为子树a的和,则每经过这样的点,子树的s至少倍增,所以点数是log级别的。考虑如何快速找到这些点,发现如果一个子树本来就过半,那么加完后依然过半,既然过半这个条件这么特殊,就把每个点连向过半的子树的边标为重边,这样每个点就向上找到第一个轻边更新,这显然用lct维护即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
zjoi2019是指第八届浙江省信息学奥林匹克竞赛(Zhejiang Olympiad in Informatics, zjoi),是浙江省级的信息学竞赛活动。这项竞赛旨在发掘和培养浙江省优秀的信息学人才,提高学生在计算机科学和算法设计等方面的能力。zjoi2019分为两个阶段,分别是省赛和决赛。 省赛是选拔赛阶段,所有报名参赛的学生都可以参加。在省赛中,学生将进行一系列的算法编程测试,测试他们在解决实际问题过程中的编程能力、算法设计思维和团队合作能力。省赛中表现优秀的选手将有机会晋级到决赛。 决赛是省选的最终阶段,在决赛中,选手将经历更加复杂和挑战性的编程测试。他们将面对更高难度的算法问题和实际应用问题,需要发挥出自己的创造力和思维能力,迅速解决问题。决赛中表现出色的选手将有机会代表浙江省参加全国性的信息学奥林匹克竞赛。 通过参加zjoi2019浙江省选,学生们将接触到高水平的算法竞赛,提升自己的编程和算法设计能力。同时,他们还能与其他对信息学感兴趣的同学们进行交流和学习,拓宽自己的视野,培养团队合作和竞赛意识。此外,脱颖而出的选手还有机会获得奖项和奖学金等荣誉,为自己的学术和职业道路打下坚实的基础。 总之,zjoi2019浙江省选是对浙江省信息学人才的全面选拔和培养,为学生们提供了一个展示自己技能和才华的舞台。这对于提高学生们的算法设计和编程能力、培养他们的团队合作精神和创新能力具有重要意义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值