摘要:
最小生成树 + 01分数规划 好烦的卡精度题,调了一下午。。 题意大概就是给你一张稠密图,每条边都有收益和花费,要求一个花费之和与收益之和的比值和最小的生成树。 当然我们可以看成收益之和与花费之和的比值最大的生成树。。 这显然是一个01分数规划问题。然后二分枚举猜测的L值跑最大生成树就行了,若最大生 阅读全文
摘要:
简单dp 众所周知,没有修改的最大连续子段和是可以用dp\[i]表示以i结尾的最大连续子段和,O(n)的方法求出来的。 我们试着把这样的转移方式代入本题。 那么就会发现其实我们考虑到a\[i]的时候有三种情况。 我们在考虑a\[i]的时候还没有去让某个区间乘以x 我们在考虑a\[i]的时候正在让某个 阅读全文
摘要:
欧拉路径 神题啊神题!这道题的突破口就是后两个数组每个元素是一一对应的。 也就是说,对于一个p的排列,b'和c'取得每一个元素的下标在p中都是一样的。 根据b和c数组的性质可以得出,b\[i] define INF 0x3f3f3f3f define full(a, b) memset(a, b, 阅读全文
摘要:
单调栈/分治 单调栈做法有点玄学。。首先用单调栈预处理出每个数左边第一个大于他的数和右边第一个大于他的数,这样可以确定在一个范围内该数数最大数。 然后从小的范围开始遍历,看看对应的另一个值在不在右边。。 这样复杂度是O(nlogn)而不是O(n^2), 类似启发式合并的证明,然而我太菜了,不知道怎么 阅读全文
摘要:
并查集 合法的简单路径只要三种情况,要么全是0边,要么全是1边,或者是先0后1的边。 于是我们可以把合法路径分成两种类型,一种是只过0的边或者只过1的边,一种是先过1再过0的边。 对于第一种情况,我们可以把某个点所在的0的联通块或者1的联通块大小统计出来,合法的第一种路径为联通块大小 1。 对于第二 阅读全文
摘要:
双指针+贪心 考虑全部配对的情况,最多有n/2种方法。 这个时候我们将数组排序,那么可以分成两部分,后半部分一定可以和前半部分配对。 所以对于一般情况,我们也可以先排序,然后分成两部分,从最后一个数开始。此时这个数为最大数,如果该数减去一个数大于等于z,肯定选择的数越大越好,因为该数去减一个很小的数 阅读全文
摘要:
贪心+思维 看到题目我竟然去写了个超级麻烦的枚举。。 其实我们可以先从最勉强的情况考虑,就是没一个字母与相邻的字母只要相差2就行了。 这启示我们把奇数位和偶数位的字母分开,在奇数位的字母和在偶数位的字母一定是合法的两个字符串,然后我们考虑一下怎样合并。 假设奇数位组成的字符串为a,偶数位组成的字符串 阅读全文
摘要:
dp 找规律 我好菜啊好菜啊,完全没有思路。 在合法的括号序列中,左括号数一定大于等于右括号数的,所以我们可以先定义平衡度为左括号数 右括号数。 然后可以发现一个惊人的规律。。就是在trie同一深度上的点,如果平衡度相同,那么他的子树完全一样。。 官方的题解给出了几个栗子: ((()) , ()() 阅读全文
摘要:
数论 gcd 看到这个题其实知道应该是和(a+k)(b+k)/gcd(a+k,b+k)有关,但是之后推了半天,思路全无。 然而。。有一个引理: gcd(a, b) = gcd(a, b a) = gcd(b, b a) (b a) 证明一下: 令 gcd(a, b) = c, (b a) 则有 a 阅读全文
摘要:
割点 割点以外的点坍塌不影响其他人逃生,因为假设我们任取两个个非割点s建立救援站,非割点的任意点坍塌,我们都可以从割点走到一个救援出口。 所以我们只考虑割点坍塌的情况。 我们可以先找出图中所有的割点。 假如图中没有割点,那么肯定需要两个救援出口才能保证有路走。 假如有割点,对于每个不含割点的联通块, 阅读全文