- 博客(9)
- 收藏
- 关注
原创 二分图最大匹配
关键是一个find函数(find(u)用来查看把u这个点加到集合中会不会增加匹配数,也就是能不能找到增广路)其实是一个很简单的思路:不断在图中寻找增广路,找不到增广路算法停止,目前统计的匹配数就是最大匹配。match[i]表示第二个集合中的点i匹配的点是match[i]这个点。每次枚举第一个集合中的点假如匹配看能否找到增广路即可。结论:最大增广数=最小点覆盖数。
2024-08-22 00:11:13 90
原创 拓扑排序
本质上其实就是找点拆边,从入度为0的点开始拆边,如果这张图的所有边都可以被拆掉,说明他的所有点可以表示成拓扑序的形式,用队列来维护(bfs)每次都是从入度为0的点开始拆,可以在拆边的过程中为一些性质,可以保证这些维护的性质都是在拓扑序上进行的。板子题:B3644 【模板】拓扑排序 / 家谱树。拓扑上dp(非常简单的dp):P1807 最长路。
2024-01-07 16:47:26 399 1
原创 Codeforces Round 900 (Div. 3)题解
思路:由于是在1~n中取,都是连续的,所以这个数只要在最小的k个数和最大的k个数之间即可(因为这样一定可以找到k个数使得他们的和等于x)题意:给你一列数,问你是否存在一个子列使得子列中出现次数最多的数为k,显然只要k在序列中肯定可以做到。思路:其实容易发现连续的一列数肯定满足这个条件,所以直接输出一列长度为n的数即可。题意:让你构造一列长度为n的数满足a[i-2]+a[i-1[!题意:问你从1~n中取k个数,能不能让这个k个数的和等于x。思路:find找一下序列中有没有出现k。
2023-09-28 21:15:28 200
原创 vpEducational Codeforces Round 104 (Div. 2)
题意:先给出一个幸运数的概念:一个数是幸运数,当且仅当这个数只由4或者7组成,然后给出一个数,要你判断这个数是否满足条件,他必须是幸运数同时他的前半部分的数的和和后半部分数的和相等。题意:给你一个数a,b,其中b是幸运数,要你找到一个最小的c满足c>a同时c的码和b的一样,码指的就是一个数从左到右中是4或者7的数的组合(按照原来的顺序),题意:其实判断下就行,如果a<b,那么这个数肯定是b,如果a>b,则就暴力模拟就行,每次让a++,再判断a的码是不是和b的相同就行。
2023-09-14 12:10:56 71 1
原创 vp Codeforces Round 588 (Div. 2)
思路:数据挺小的,容易找规律发现,如果顶点小于等于6的话,直接让每个顶点的下标被指向相应的点数就行,所以直接输出m就行,再特判一下七个点0条边的情况,顶点数大于7的话说明肯定是有两个点是重合的,但是两个重合的点是不能存在多条边连到另外一个点的,所以只要找出这样的边的数量,再将其删去,其他的都可以按照上述的操作把所有的边都加上多米诺骨牌。题意:给你n个点,m条边,然后要在边上插入一个多米诺骨牌(有两个部分,每个部分都有相应的点数),每个点被指向点数必须相同,要求你求出最多可以给多少条边加上多米诺骨牌。
2023-09-09 23:19:43 126 1
原创 Codeforces Round 895 (Div. 3)题解
思路:贪心的想,肯定是把大的数放到加的里面,小的数放到减的里面,而从样例解释中可以发现,如果下标是x和y的最小公倍数的倍数的,再计算过程中抵消了,所以对f的值并没有贡献,在计算的过程中可以减掉,所以只要计算出n以内有多少个x的倍数,有多少个y的倍数,再减去他们的最小公倍数的倍数的个数,再进行贪心就行(tips:如果直接暴力给会tle,所以直接用等差数列的求和公式即可)=1,然后直接输出即可。题意:给你一段区间的左右端点l,r.看你能否找到两个数a,b满足 l=
2023-09-08 19:10:30 266 1
原创 vp Educational Codeforces Round 123 (Rated for Div. 2)
题意:给你一列数,你可以进行k次操作,(0=<k<=n),操作是这样的:你可以每次选择一个没有被操作的数(也就是说如果可以进行多次操作,必须每次操作要用在不同的数上),然后让它加上x,要你每次输出操作k次后的f(k)的值,f(k)定义为在进行k次操作后原数组中连续子序列的和的最大值(对于一列数 1 2 3 来说 [1,1] [2,2] [3,3] [1,2] [2,3] [1,2.3]都是它的连续子序列,但是[1,3]却不是,因为它不满足连续 )=a[i-1]+a[i+1];
2023-09-07 18:40:04 51
原创 vp Codeforces Round 595 (Div. 3)
思路:容易发现,将这些数排序之后,如果这些数中出现相邻的差值为1的就至少得分两组,但是如果出现多组差值为1的,也是两组,为什么呢:可以将相邻的交叉来分,相邻的差值为1的放进不同的两组就行,所以只要存在相邻的数差值为1的就是两组,不存在就是1组。题意:给你一个数n, 让你找出大于等于n的最小的好的数,对于一个数他是好的定义是:他可以由不同的3的整数次幂相加得到,例如3=3^1,4=3^0+3^1,12=3^2+3^1,这些数都是好的,而2=3^0+3^0,6=3^1+3^1,不是好的。
2023-09-06 17:53:51 64
原创 回家vp Codeforces Round 776 (Div. 3)
通过样例解释可以看出一个段的权值,只算这个段的两个端点的权值,所以我们可以开一个结构体,记录每个点的坐标,对应的权值,以及读入的下标,然后先根据权值排序,再根据坐标排序。:这个题其实挺容易想到当模数为a-1时f(x)是取最大的,但是需要考虑特殊情况,如当l/a==r/a(并不是区间长度小于a),(因为在这个区间内f(x)的值是单调递增的),以及r%a==a-1的时候,其他情况都是r向前进1,再令模数为a-1。
2023-08-26 13:04:56 80
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人