上一页 1 2 3 4 5 6 7 8 9 ··· 21 下一页
摘要: 绝世好题啊。。 题意:给出一个DAG,和每个点要求出现在这个DAG里面的拓扑排序的位置<=ti,求出所有可能的拓扑排序里面每个点出现的位置的最小值。 正着做不好做,考虑反着做,建立这个图的反图。 对于一个点出现的位置的最小值,就是n-这个点在反图中出现的位置的最大值。 也就是说拓扑排序时尽量把这个点 阅读全文
posted @ 2017-05-22 23:06 free-loop 阅读(448) 评论(0) 推荐(0) 编辑
摘要: 类似于happiness的一道题,容易想到最小割的做法。 但是不同的是那一道题是相邻的如果相同则有收益,这题是相邻的不同才有收益。 转化到建图上面时,会发现,两个相邻的点连的边容量会是负数。。 有一种转化的办法,把图进行黑白染色后,把白点的S-T倒转过来,这样就转化成了happiness那道题了。。 阅读全文
posted @ 2017-05-22 15:03 free-loop 阅读(226) 评论(0) 推荐(0) 编辑
摘要: 写了5KB,1发AC。。。 题意:给出一颗树,支持5种操作。 1.修改某条边的权值。2.将u到v的经过的边的权值取负。3.求u到v的经过的边的权值总和。4.求u到v的经过的边的权值最大值。5.求u到v经过的边的权值最小值。 基于边权的树链剖分,放在线段树上变成了区间维护问题了,线段树维护4个量min 阅读全文
posted @ 2017-05-21 23:18 free-loop 阅读(140) 评论(0) 推荐(0) 编辑
摘要: 解法很多的题,可以块套树状数组,可以线段树套平衡树。我用的是树状数组套主席树。 题意:给出一段数列,m次操作,每次操作是交换两个位置的数,求每次操作后的逆序对数。(n,m<=2e4). 对于没有交换操作的逆序对数,可以直接用树状数组直接统计。 考虑每次交换操作(l,r),那么逆序对数会有什么变化呢。 阅读全文
posted @ 2017-05-21 16:31 free-loop 阅读(145) 评论(0) 推荐(0) 编辑
摘要: 题意:求1-n!里与m!互质的数有多少?(m<=n<=1e6). 因为n!%m!=0,所以题目实际上求的是phi(m!)*n!/m!. 预处理出这些素数的逆元和阶乘的模即可。 # include <cstdio> # include <cstring> # include <cstdlib> # i 阅读全文
posted @ 2017-05-21 12:16 free-loop 阅读(207) 评论(0) 推荐(0) 编辑
摘要: 给出一颗n个点带边权的树(n<=20000),求随机选择两个点,使得它们之间的路径边权是3的倍数的概率是多少。 首先总的对数是n*n,那么只需要统计路径边权是3的倍数的点对数量就行了。 考虑将无根树化为有根树,令dp[x][i]表示以x点为路径起点,x的某个子孙为路径终点的边权值模3为i的点对数量。 阅读全文
posted @ 2017-05-20 16:51 free-loop 阅读(144) 评论(0) 推荐(0) 编辑
摘要: 简化题意可知,实际上题目求得是gcd(i,j)=1(i,j<=n)的数对数目。 线性筛出n大小的欧拉表,求和*2+1即可。需要特判1. # include <cstdio> # include <cstring> # include <cstdlib> # include <iostream> # 阅读全文
posted @ 2017-05-20 15:40 free-loop 阅读(153) 评论(0) 推荐(0) 编辑
摘要: 注意到每个路线相邻车站的距离不超过K,也就是说我们可以对连续K个车站的状态进行状压。 然后状压DP一下,用矩阵快速幂加速运算即可。 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <algorithm> #def 阅读全文
posted @ 2017-05-20 15:24 free-loop 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 最小割的建图模式一般是,先算出总收益,然后再通过网络模型进行割边减去部分权值。 然后我们需要思考什么才能带来收益,什么才能有权值冲突。 s连向选的点,t连向不选的点,那么收益的减少量应该就是将s集和t集分开的割边集。 下面说这道题的建图: 点: 每个人一个点,额外设源汇点。 边: 源向人连这个人能造 阅读全文
posted @ 2017-05-20 12:40 free-loop 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 很好的一道题。 题意:给出长度为n的数列,选择k个互不相同的区间,满足每个区间长度在[L,R]内,求所有选择的区间和的总和最大是多少。(n,k<=5e5). 首先将区间和转化为前缀和之差,那么我们想要区间和的总和最大,一个朴素的想法是把所有满足限制的区间和排序,取最大的k个。 考虑每个右端点i,其中 阅读全文
posted @ 2017-05-20 11:09 free-loop 阅读(173) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 9 ··· 21 下一页