排序:
默认
按更新时间
按访问量

浅谈自己对二分的理解和运用

二分是ACM中十分常用的技巧,在有序,或者更准确说是单调递增(减)条件下,可以快速查找一个需要的数字。常用于:在时间最小的情况下(二分时间),在最长边最短的情况下(二分长度 )。 但是我这么久了依然写不好二分。本菜鸡决定写个总结。 二分的基本模板: while(front <= back) ...

2018-05-08 12:03:31

阅读数:15

评论数:0

CodeFroces 977F. Consecutive Subsequence

题意:给出一个长为n的序列,求出最长的递增序列且该序列公差为1.解法:首先可以发现n只有2e5,但是数字范围a是1-1e9.    n相比a很小,所以一贯的套路就是离散化n个数字。           由于这个递增序列公差必须为1,我们考虑dp,递推式就是dp[i]=dp[i-1]+1,i代表当前...

2018-05-17 13:04:14

阅读数:9

评论数:0

CodeFroces 978D. Almost Arithmetic Progression

解法其实很简单,但是自己写的太挫了,然后就FST了。题意:给定一个长为n的序列,每个数字只能+1,不变,-1三个操作,问最少用多少次操作可以将序列凑为一个等差序列。解法:首先跑一遍整个序列,找到相邻两个序列之差的最大值和最小值。很明显,如果最大值和最小值之间的差值大于4肯定是怎样变化都无解的。如果...

2018-05-16 22:39:48

阅读数:10

评论数:0

Wannafly挑战赛2 B-Travel(抽40个点跑最短路)

发现这道题真的挺难写的。。。如果单纯是个环,我们直接用前缀和就能求出两点之间的距离,现在额外添加了一些边。我们分情况讨论。 1.只走环上的点,那么直接前缀和相减就能得到答案。 2.走了传送门。从起点出发,那么可能先走a传送门,再走b传送门……最终到达终点。 我们最后只需要在1得到的答案和2得...

2018-05-08 10:31:36

阅读数:19

评论数:0

LOJ 6045. 「雅礼集训 2017 Day8」价(最大闭合子图)

解法:一眼看去,真的太像最大权闭合子图了。但是分析一下发现,这道题的药材是没有费用的,最重要的是,题目要求所用药和药材的数量要一样。这可真的是难倒我了。看了一发别人的解法才发现太妙了。 对于网络流二十四题中的《太空飞行计划》,这是一道最大权闭合子图的经典题,这道题中启用一个方案获利x元,但是要花...

2017-10-26 19:56:07

阅读数:113

评论数:0

UVA 10480 Sabotage (输出最小割所用边)

题意:给出一个图,要分割开1和2,每条边都有一个花费而且是无向的,问用上了哪些边,输出。 在今年多校赛的时候写过一道输出最小割所用边的数量,但是今天遇到这个输出用了哪些边我就懵逼了。前几天还写过一道二分图的题目,判断一条边是否是必须存在的边,即是否删除这条边二分图的最大匹配数就变了。所以想在这题也...

2017-10-25 19:28:49

阅读数:121

评论数:0

HDU 3829 Cat VS Dog (反建法求最大独立集)

反建法求最大独立集一直都是二分图的一大套路。 这题目分析的时候,有种选了C1就不能选D1这种感觉,于是把cat和dog放在两边,看是否可以构成二分图求解。但是仔细想想这题目,求的是最多的开心人数,用cat和dog建图并不能说明什么。于是我们想其他方法。我们要的是人数,那么干脆用小孩来建二分图。怎...

2017-10-25 09:59:20

阅读数:95

评论数:0

POJ 3648 Wedding(2-SAT输出一组解)

题意:有新郎新娘举办婚礼,吃饭的时候大家坐在一长方形桌,桌子有两列,新娘坐一列上看对面一列,她定义以下事情会让她不开心:夫妻都在对面一列或有仇人在对面一列。问是否能安排出合理方案使得新娘开心。如果有,输出YES并且输出新娘这一列坐着的人,否则输出bad luck。 解法:夫妻不能在同一列,所以夫...

2017-10-16 11:28:31

阅读数:101

评论数:0

HDU 3622 Bomb Game(二分 + 2-SAT)

点击打开链接 题意:给出n对点,每对点只能选取一个。每个点都会以自己为中心进行爆炸且半径相同,问最大爆炸半径是多少。 解法:两个之中选一个,可以考虑2-SAT求解。由于半径是要求的,所以二分半径,然后每次都建图用2-SAT判断看是否可行。 此处2-SAT保留的是不能共存的边。 代码如下: #inc...

2017-10-15 09:09:26

阅读数:88

评论数:0

CodeFroces 873B. Balanced Substring(思维题)

点击打开链接 题意:给出一个字符串,求其中满足0和1的个数相等的最长字符串的长度。 解法:当时只能想到枚举区间然后直接用前缀和判定的方法,但是枚举区间复杂度明显不对。 然后想到了二分,发现很多数据都挺对的,然后wa24。想了想发现,有可能4不满足但是6满足,故不存在单调性。。。 最后看了一发题解。...

2017-10-14 21:12:17

阅读数:114

评论数:0

Vijos 1843 货车运输(最大生成树 + 树上倍增模板)

解法:首先想到肯定是尽量用边权大的边,所以直接用最大生成树建图即可。建完图之后,由于询问数很大,所以要想一个高效的求两点之间边权最小的边的办法。一开始想到树链剖分,感觉很麻烦,代码量巨大。想用LCA的ST表来维护,但是发现维护困难,因为是边而不是点。最后才知道要用树上倍增做。预处理出深度小的点到深...

2017-10-14 18:41:11

阅读数:93

评论数:0

CodeFroces NWERC 2015 E.Elementary Math(二分图)

题意:给出n对数字,可以在n对数字中间用+,-,*三种运算,要保证最后得到的答案不能有相同的。 解法:考虑到n只有2500,数据量比较小,最多只会有7500种结果,所以可以构造二分图。左边是n个点代表n对数字,右边?个点,代表结果。左边n个数字都向着右边他所能得到的答案连一条边。 如果有两对数...

2017-10-14 09:59:37

阅读数:88

评论数:0

POJ 3207 Ikki's Story IV - Panda's Trick (2-SAT)

传送门 题意:有一个圆,圆周上有n个顺序的点,然后有m组边,这些边的两个点必须连起来,圆有两个面,你可以在正面连接他们,也可以在反面连接他们。问是否可以使得这m条线不相交。 解法:因为这些点是按照顺序排序的,在同一个面的情况下,有两对线分别是1 5,2 6,那么就会发现他们肯定是相交的,其实就是...

2017-10-11 21:45:52

阅读数:94

评论数:0

Uvalive 7037 The Problem Needs 3D Arrays (最大密集子图)

题意:给出一些数字,找出逆序对。令 逆序对的个数/数字个数 最大。 解法:我们先将逆序对用线标出来,然后就会发现这就是 边的数量 / 点的数量。这就是图的密度的定义。找最大密度则是用最大密集子图。求最大密集子图的方法见《最小割模型在信息学竞赛中的应用》。 代码如下: #include #in...

2017-10-07 11:00:31

阅读数:124

评论数:0

Ural 1277 Cops and Thieves(最小点割集/最小割)

题意:一个团伙去偷一个美术馆,警察决定在路上堵截。警察人数为k,不能在贼窝和美术馆驻扎,只能在图上其他点驻扎,而且驻扎有一个最小人数要求,问警察能否完成任务。 解法:又是最小点割集题目,每个点拆点即可,边权为给出的r[i],然后跑一遍最大流求最小割,比较一下是否小于等于k即可。 坑点,如果美术...

2017-10-06 16:35:30

阅读数:78

评论数:0

POJ 1815 Friendship (最小点割集/最小割)

题意:给出每个朋友之间的联系表,如果a联系b,b联系c,那么a是可以联系c的。问最少要去掉多少个朋友才能使得s无法和t联系上。如果有一样的方案输出字典序最小的。 解法:很像最小割有木有?但是这次不是边而是点,那么我们拆点不就好了。跑一次最大流发现一开始流量为f,那么我们从1到n枚举点,试着把第i...

2017-10-06 15:37:41

阅读数:67

评论数:0

南阳理工OJ 石子归并(经典区间DP)

点击打开链接 解法:一开始我愚蠢地认为一个一个并就可以了,但是样例都过不去。发现要区间区间地合并才对。那么转移方程就是dp[i][j] = min(dp[i][j], dp[i][k] + dp[k + 1][j] + cnt[j] - cnt[i - 1]); dp[i][j]表示i到j合并...

2017-10-06 11:59:30

阅读数:68

评论数:0

CodeFroces Round 438C. Qualification Rounds(思维题)

题意:给出n个题目,k个队伍是否刷过这题的情况表。现在要举办一场比赛,要求用的题目,不能有队伍已经刷过一半以上。问是否存在解。 解法:当时瞎写发现,好像只要选两个就可以了,然后就开始猜结论来写。由于k只有4,所以说最多只有1 代码如下: #include #include #include ...

2017-10-06 11:05:06

阅读数:81

评论数:0

CodeFroces Round 438 B.Race Against Time(模拟)

题意:给出时间,那么钟上的三个指针就确定位置,现在要从t1到t2,中途不可以穿越指针,问是否可行。 解法:当时想的是既然是小时之间的,那么我只需要把小时之间的给标记了即可。但是这样写会有反例。所以应该把这个钟扩大12*60倍。然后对应的标记上每个指针的位置,然后正反for一遍即可。 代码如下:...

2017-10-06 10:59:42

阅读数:73

评论数:0

POJ 3280 Cheapest Palindrome(区间DP)

题意:给出一个字符串,你要把他凑成回文串,问最小花费。 解法:一开始以为只能在两边加减字母,然后一直wa。后来拿了别人的程序发现可以在中间加字母的。 dp一下,dp[i][j]表示把i - j的字符串凑成回文串的最小花费。 转移方程:如果i和j的字符相同,那么直接就是他们包围的字符串的最小花...

2017-10-05 11:26:28

阅读数:47

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭