11.26 WC模拟总结&题解

T1 简单路径

Description

给定一棵带边权的树,选择两条没有公共边的简单路径(长度可以为0),使得所有在任意一条路径上的边的异或和尽量大。

Input

第一行一个数n表示点数,点的编号是0到n-1。
接下来一行(n-1)个数,第i个数表示编号为i的点的父亲编号,保证这个编号小于i。
接下来一行(n-1)个数,第i个数表示编号为i的点到它父亲的边的边权。

Output

输出一行一个数表示答案。

Sample Input

输入1:
9
0 0 2 2 4 4 5 6
13 16 12 11 3 1 4 2
输入2:
12
0 0 2 0 1 2 2 4 6 1 5
628 589 815 864 459 507 733 239 904 592 818

Sample Output

输出1:
31
样例解释1:
两条路径可以是4->6->8和0->2->3。

输出2:
1017

Data Constraint

对于50%的数据,n<=100。
对于100%的数据,n<=1000,边权均为不超过1000的非负整数。

T2 快乐树

Description

一棵树有n个节点,编号为0到n-1。有一条叫Owaski的狗在树上面走,每一次它可以从一个顶点走到它的任何一个相邻顶点。每个顶点有个可正可负的快乐度,Owaski也有一个快乐度,这个值最开始是0。在他到达一个
顶点的时候,他的快乐度将会加上该顶点的快乐度。当然有时候Owaski的快乐度会是负数,这个时候他会很难受于是会宣泄情绪让快乐度重新变成0。Owaski是一条喜新厌旧的狗,如果它经过了任何一个曾经经过的节
点,它的快乐度不会变化,哪怕这个节点的快乐度为负数。也就是说一个点只有在第一次经过时会对这条狗的快乐度有影响。
Owaski第一个访问的点永远是0号节点(这个点的快乐度也要算),它可以在任何时候离开。它希望它离开时的快乐度尽量高。计算这个快乐度。

Input

第一行一个数n表示点数,点的编号是0到n-1。
接下来一行(n-1)个数,第i个数表示编号为i的点的父亲编号,保证这个编号小于i。
接下来一行n个数,第i个数表示编号为i-1的点的点权。

Output

输出一行一个数表示最大的快乐度。

Sample Input

输入:
9
0 0 1 1 2 2 5 5
1 2 -3 -7 3 2 7 -1 3

Sample Output

输出:
17
样例解释:
最优路径可以是:
0->2->5->8->5->2->6->2->0->1->4

Data Constraint

对于30%的数据,n<=10。
对于60%的数据,n<=20。
对于100%的数据,n<=1000,快乐度均为绝对值不超过1,000,000的整数。

T3 字符串

Description

一个字符串的权值是这个串包含的不同字符个数。
给定一个长度为n的字符串,把它分为k个连续非空字段,每个字符必须在某一段中,最小化字符串的权值和。

Input

第一行两个数n,k,含义如题所述。
接下来一行一个长度为n的字符串,保证仅包含小写英文字母。

Output

输出最小权值。

Sample Input

输入1:
12 3
abaacdddfeff
输入2:
50 35
acbdcfabcaedscdbcsbacbdcbbacjacbkabcjadkcbsjkckkza

Sample Output

输出1:
6
样例解释1:
一种最优方案是分为:”abaa”, “cddd”和”feff”。
输出2:
39

Data Constraint

对于10%的数据,n<=10。
对于30%的数据,n<=200。
对于50%的数据,n<=1500。
对于另外20%的数据,仅包含a和b两种字母。
对于100%的数据,1<=k<=n<=100,000。

一些别的话

这次是OI赛制,实时返还分数,非常带感,我享受着被摁在地上摩擦,并且看着大佬们AK的快感。

题解

感觉这三道题都不难,都是想法题,想到了差不多能A掉。

T1

朴素暴力比较麻烦的地方是判断两条简单路径重叠与否。
发现一些神奇的性质:
1、答案总数最多1024种,即答案只有0~1023
2、两条重叠的简单路径的答案直接异或,相当于两条不重叠的简单路径的答案异或。
根据这两个性质,我们就可以暴力(伪)了。
重叠可以不用判断了!!
直接处理出n^2条路径的答案,存进一个桶里,然后O(1024*1024)找最大答案即可。

谴责一波数据,我O(2000*n^2)加一个break居然跑过去了。
发现题面有一个东西,i的父亲的编号严格小于i。
所以读入的时候好像可以O(n)处理诶!
所以最终的总复杂度是O(1024*1024)超级稳定。

代码就不贴了,因为打的丑,还上了lca……

T2

如果没有清零操作那是傻逼题诶。
30%数据爆搜。
60%状压bfs。
100%树形dp,设f[i,0/1]分别表示以i为根的子树i取或者到i清零(也可以不清零)的最大值是多少。
随便转移就好。

T3

做想法题就是要发现性质的!
发现:最优答案在[k,k+25]之间。
首先如果每段只有一种字母,那答案肯定是k最优啦。
如果最劣,肯定是前面k-1段每段1个字母,最后1大段一共26种字母。
那就是k+25
于是我们可以设dp
f[i,j]表示分了i段,答案为i+j的最右端可以到的位置。
预处理一个g[i,j]表示从i开始,答案为j的一段最右可拓展的位置,就可以O(1)转移了。
最后答案在f[k,i]中,若f[k,i]=n那么这是一个合法答案。
总复杂度为O(26^2*n)
但这是水法诶qwq
因为最右不一定最优啊!
应该取个min才对,我太弱不知何处取min怎么办,好像放个坑在这qwq

不过我觉得这种情况应该不会出现,如果你在某个状态还没有取到k段就已经取完了所有,那么最优的答案肯定可以从另外一个子状态转移过来的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值