| solved | A | B | C | D | E | F | G | H | I | J | K | L | M |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 4 / 13 | · | O | · | · | Ø | · | · | Ø | · | · | O | · | · |
- O:比赛时通过
- Ø:赛后通过
- !:比赛时尝试了未通过
- ·:比赛时未尝试
B - Prefix Code
Solved by all. 0:49(+1)
题意: 给你一堆数字,问你是否没有任何一个完整的数字是其他数字的前缀。
题解: 上来直接冲了发字典树,后来发现没有考虑类似于53 5的这种情况。于是sort了一下再进行插入操作。
AC代码
1 | //#include<bits/stdc++.h> |
E - Cave Escape【最大生成树】
solved by lllllan. (-)
题意: 在一个的图中,你需要从指定起点走到指定终点(但是到了终点仍然可以继续移动)。每当移动到一个为访问过的位置,将获得一个。求最大能获得的权值和。
题解: 指定终点是可以忽略的,反正到达终点以后还能移动,最后计算的也是最多一共可以获得多少权值。转念一想指定起点也是可以忽略的,因为不要求输出路径,并且需要遍历全图,那就干脆从左上角第一个点出发遍历所有的点也是一样的。而路径的选择上便是“贪心”,从某个点出发的四条路,选择其中能获得的权值最大的边先行。然后就发现,其实就是一颗生成树了。虽然最后总的路径不一定是树,但是能够获得权值的路径一定是树。 所以就变成了一个求最大生成树的题目。
常规的最大生成树方法 由于这样的复杂度只是勉强能接受,所以在建边是千万不要重复【一模一样的代码交了五次TLE了一次,通过的运行时间为】
AC代码
1 |
|
一点变形 运行时间
AC代码
1 |
|
H - Tree Partition
Solved by Sstee1XD. (-)
题意: 给你一棵树以及它的所有点权,问你把这棵树分成k份以后,最大值的最小值是多少。
题解: 想不到十分优秀的时间复杂度的算法来解决,所以我们考虑二分。二分出子树的最大值,每次贪心地去合并小的,直到合并不了了,那么剩下的子树都单独成树,最后出来再把份数+1。注意如果算出来的份数比要分的小也要记录答案,不然就过不了类似于 4 500 500 2 (2)这样子的分成三份的树的样例。
AC代码
1 |
|
K - Color Graph
solved by Sstee1XD & lllllan. 02:31(+1)
题意: 给定一个简单图,对边进行染色,要求不能出现所有边都被染色的奇环。求最多可以染多少条边。
题解: 如果不能有环,则为一棵树,可以有环但是不能有奇环,则为二分图。则将所有的点分成两个集合,不同集合之间的点的边可以进行染色。因为点最多只有16,即可暴力枚举点的情况,针对所有的情况去计算可以染色的边数,求最大值。
AC代码
1 |
|