自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(96)
  • 收藏
  • 关注

原创 计算几何基础知识整理大全 代码模板与证明过程 (直线、向量、多边形、三维计算几何、凸包、半平面交、最小圆覆盖)

计算几何基础知识1、求π\piπ的方法我们在代码中一般把π\piπ记作PI,PI = acos(-1)。因为我们都知道cos(π\piπ) = -1,所以PI = arccos(-1)。acos()2、余弦定理c^2 = a^2 + b^2 - 2acos(t);3、向量(1)向量的加、减、数乘运算计算:坐标分别直接相加减乘。对应几何意义:平行四边形法则。(2)向量的内积内积也称作点积:a⃗⋅b⃗=∣a⃗∣⋅∣b⃗∣⋅cosθ\vec a \cdot \vec b = |\vec a|

2021-03-08 17:12:20 1845 4

原创 一篇网络流 基本模型超全总结(最大流 费用流 多源汇最大流 上下界可行流) 思路+代码模板

一、网络流与最大流网络流(network-flows)是一种类比水流的解决问题方法,与线性规划密切相关。在一个有向图中,一个源点S到一个汇点T之间有连边,边的权值是该边的最大容量,网络流就是从S点到T点的一个可行流。网络流最初的问题就是研究最大流,就是指所有可行流里面最大的流。举个简单的例子,如下图:若v1到v6六个点表示的是六个城市,每条边的权值表示的是城市之间路的长度,选择要运送一批物资从v1到v6,要走的路最短这就是最短路问题。但是如果v1到v6表示的是六个中转站,每条边表示的是水管,权值

2020-12-06 09:53:27 7676 6

原创 最小路径覆盖与最小链覆盖 Dilworth定理:最小链覆盖等于最长反链(详细证明与经典例题)

一、最小路径覆盖定义最小路径覆盖就是指在有向无环图中,用最少的、不相交的简单路径覆盖图中的所有点。解法①将原图中的每个点拆点,(将点u拆成u与u+n);②将原图中的每条边 <u,v> 在新图中建立对应的边 <u,v+n>;③将点(1 ~ n)作为二分图的左部,将点(n+1 ~ 2*n)作为二分图的右部,进行二分图的最大匹配;④所求的最少路径数等于总点数n 减去 最大匹配数。二、最小链覆盖定义最小链覆盖和最小路径覆盖的区别是,最小链覆盖允许路径相交。最小路径覆盖

2021-12-29 19:53:54 2025

原创 AcWing 246. 区间最大公约数(线段树)题解

原题链接传送门:AcWing 246. 区间最大公约数题目大意有两个操作,第一个是修改:给区间[l,r]的数都加上k,第二个是查询:查询区间[l,r]内的最大公约数。具体思路这道题一看就是一个线段树的操作,而且线段树存的是区间的最大公约数(x结点的gcdgcdgcd等于左结点gcdgcdgcd与右结点gcdgcdgcd的gcdgcdgcd),这样子能很好的实现区间查询操作,但是对于区间修改很不方便,于是我们想到用线段树来存差分数组能很快的实现区间修改操作。因此我们就来想一想能不能直接用差分数

2021-11-18 14:57:01 301

原创 一篇树状数组 入门到进阶 实现原理+代码模板详解

一、树状数组的是什么我们首先要了解树状数组是什么,树状数组是一种数据结构。他主要功能是能够高效的实现区间求和以及单点修改操作。我们可以知道,最高效的区间求和是计算前缀和数组从而O(1)O(1)O(1)的实现,但是求完前缀和数组后在进行单点修改的时间复杂度是O(n)O(n)O(n)的(一次单点修改需要修改整个前缀和数组),因此执行m次区间求和以及单点修改的时间复杂度是O(mn)O(mn)O(mn)的。而如果用一个数组存所有数的话区间求和的复杂度是O(n)O(n)O(n)的,而单点修改的复杂度是O(1)O

2021-11-10 20:52:06 659

原创 一篇数论 基础数论详解(质数筛、约数、欧拉定理、快速幂、逆元、组合数学、卡特兰数)

数论一、质数质数的定义:在大于1的整数中,只包含1和它本身两个约数的数称为质数,也称作素数。1、质数的判定(1)试除法:根据定义来判断最朴素的方法,时间复杂度O(n),代码如下:bool is_prime(int n){ if(n < 2) return false; for(int i = 2;i < n;i++) if(n % i == 0) return false; return true;}对此方法的优化:我们可以发现,一个数所有的约数都是成对出

2021-10-03 11:30:33 2230 7

原创 Acwing 893:集合Nim游戏(博弈论 sg函数)

题目链接传送门:Acwing 893:集合Nim游戏题目大意先给定一个集合s,有k个元素。然后有n堆石子,每堆分别有hih_ihi​个,每次都可以从某一堆中取出x个石子(这里的x规定必须是集合s中的一个元素),两个人轮流取最优,问是否先手必胜。(1≤n,k≤1001≤n,k≤1001≤n,k≤100,1≤si,hi≤100001≤s_i,h_i≤100001≤si​,hi​≤10000)大致思路这就是一个变形的Nim博弈,我们每次取的个数不是任意的了,而是在规定的集合s中选一个数,取这么多个石子

2021-10-03 11:19:11 413

原创 Lucas定理 原理、证明及代码模板

一、定理对于素数p,及正整数a、b,当求组合数CabC_a^bCab​对p取余时,如果a和b很大(1≤b≤a≤1015)(1≤b≤a≤10^{15})(1≤b≤a≤1015),而p相对较小(1≤p≤105)(1≤p≤10^5)(1≤p≤105)时,我们用Lucas定理来求。结论:Cab≡Capbp⋅Ca%pb%pC_{a}^{b}\equiv C_{\frac ap}^{\frac bp}\cdot C_{a\%p}^{b\%p}Cab​≡Cpa​pb​​⋅Ca%pb%p​ (mod p)二、证明首

2021-08-31 18:33:45 409

原创 费马小定理与欧拉定理 原理与证明

一、欧拉定理1、定义若a与n互质,则aφ(n)≡1a^{\varphi (n)} \equiv 1aφ(n)≡1 (mod n)。其中φ(n)\varphi (n)φ(n)指欧拉函数:小于n的正整数中与n互质的个数。2、证明我们假设n的质因子分别是:p1,p2,...,pφ(n)p_1,p_2,...,p_{\varphi(n)}p1​,p2​,...,pφ(n)​,记为序列1。若给每一项都乘a,得序列2:ap1,ap2,...,apφ(n)ap_1,ap_2,...,ap_{\varphi(n

2021-08-15 19:50:15 2491 1

原创 Trie数 字典树 算法思想及代码实现

Trie树Trie树又称字典树,是一种简单的树形数据结构,他的主要作用是高效地存储和查找字符串,其实现原理是利用字符串的公共前缀来减少查询时间,最大限度的减少无谓字符的比较,效率高。三个基本性质根节点不包含字符,除根节点外每一个节点都只包含一个字符;从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串;每个节点的所有子节点包含的字符都不相同。存储规则从根节点开始,存一个字符串,先看根节点连接的子结点有没有第一个字母,有的话接着从他往下找第二个字母,以此类推;若没有某一字母,就

2021-08-06 11:52:03 193

原创 c++数组去重

使用c++的STL库函数实现数组去重代码:vector<int> arr; //假设数组是arrarr.erase(unique(arr.begin(),arr.end()),arr.end()); //去重函数都是在algorithm头文件下unique函数是将数组中所有重复元素换到末尾处,并返回不重复元素的尾地址。erase函数是删除地址区间内的数,将重复部分的数删掉,就实现了去重。...

2021-08-05 10:29:45 2186

原创 Codeforces Round #735 (Div. 2) C. Mikasa (位运算)

题目大意原题链接:C. Mikasa题目给定一个n和m,要求n⊕0,n⊕1,…,n⊕m的MEX值,⊕是指异或运算,MEX指未出现的最小的非负整数。例n=3,m=5,则3⊕0,3⊕1,3⊕2,3⊕3,3⊕4,3⊕5, 结果为 3,2,1,0,7,6,未出现的最小非负整数为4。思路我们要求的是n⊕x,x为从0-m的整数,首先我们知道n⊕n=0,那么当n > m的时候,0一定未出现过,则MEX值就为0。然后在n ≤ m的情况下,我们假设n⊕x的值为k,那么根据异或的性质可得n⊕k=x,这样我们就可

2021-07-31 09:52:52 418 2

原创 2021牛客暑期多校训练营2 K:Stack (构造)

题目大意原题链接:K:Stack给你一个b序列中的k个位置的数,让你构造一组满足要求的a序列,其中bi代表a数组中第i个数作为结尾的最大上升子序列的长度为bi,而a数组是一个1-n的全排列,每个数不重复。若无法构造,输出-1。思路首先我们假设先不考虑a数组是一个全排列,即不用管不重复的问题,那我们首先将所有已给的k个数放在他相应的位置。然后将其他没确定的数,从前往后依次给定,我们给他赋值为前一个数加一。这样我们确定的一个序列一定是满足题意的,只是会有数字重复。举个例子,加入我们给定b的第四位是1

2021-07-29 18:15:57 158

原创 中兴捧月算法比赛2021 比特派 C:排队 (单调栈+二分查找)

原题链接C:排队题目大意一堆人在排队,每个人都有三个参数:位置、身高、视力。小朋友i能看到小朋友j,需要满足2个条件:1、j在i的试里范围内,即i和j的位置差的绝对值小于等于i的视力大小。2、i和j之间不存在大于等于j身高的人。(联系实际,如果i和j之间有一个高于等于j的人,就会把j挡住,i就看不见j了)求每个人能看到几个人(不含自己)。思路暴力做法先循环每一个人,然后对每个人往左往右找能看到几个,但这样O(n2)O(n^2)O(n2)肯定会超时,所以我们就得优化。我们可以考虑对于第i

2021-05-10 11:03:18 532 1

原创 力扣第 240 场周赛 5752. 子数组最小乘积的最大值(前缀和+单调栈)

原题链接5752. 子数组最小乘积的最大值题目大意:给一个数组,求所有子数组的权值最大值,权值的计算方式:子数组中最小的元素乘子数组所有元素的和。思路一个单调栈模型的应用。如果枚举所有子数组的话那一定会超时,所以我们只能枚举每一个数,将这个数作为子数组中最小的元素,然后为了使权值最大,就得使元素的和最大,而每个元素都是正数,所以元素的数量要最大。因此对于第i个数作为最小值时,往左找最近的小于他的数,再往右找最近的小于他的数,这个区间内的数组就是满足i作为最小值的最大权值数组,然后计算每个i的数组的

2021-05-09 20:54:20 183

原创 单调栈 模型整理与应用 & 经典例题

单调栈单调栈是指一个栈里所有的元素是单调的,单调递增(或递减)的,通过维护这个单调的栈我们可以实现许多的目的。单调栈模型的应用单调栈模型最直接的用处是来求数组每个数的往左第一个比他小的数,或往右第一个比他小的数,这类问题。我们如何来求每个数的左边第一个比它小的数呢?最简单的做法就是从i往左循环,直到找到比他小的数为止。但这样找完n个数,时间复杂度是O(n2)O(n^2)O(n2),有时会超时,那么我们可以用单调栈来求就可以在O(n)O(n)O(n)的复杂度内求出。证明: 我们可以发现第i个数左边可

2021-05-09 20:20:23 174

原创 Acwing 342:道路与航线 (含有无环负权边的最短路问题 dijkstra+topsort)题解

题目大意原题链接:Acwing 342:道路与航线各城市之间有道路也有航线,道路是双向的且权值为正,航线是单向的且权值有负,保证航线连接的两个城市ab,只能从a到b,而不能以任何途径从b到a,路的权值是花费。给定一个起点,求从起点到其余所有城市的最小花费。思路根据题意,所有道路相连的城市都是一个连通的无向图,将这样的城市群看作一个团,整张图会有很多个团,每个团之间有单向的边,权值可能是负数,如下图,黑边是道路,红边是航线:既有正边又有负边的单源最短路问题应该怎么做?dij二u发处理负权边,因此

2021-04-20 15:45:50 163

原创 关于cin读入和scanf读入的快慢问题

scanf比cin快关于scanf比cin快这个结论大家肯定都知道,但是一般情况下很难体现出来,只有当读入数据很大时,才会体现出scanf的快,以前从来都没有碰到过一道题是卡了cin输入的,但是今天终于碰到了!!!所以记录一下。cin坑题原题链接:Simone and graph coloring题目出处:2020ICPC昆明站本质上就是求最大下降子序列,并且求出以每一位作为结尾的最大下降子序列的长度,这个就是染色的数字。显然要用nlogn的做法,n2的做法肯定会T,于是就有了代码:...

2021-04-09 21:52:29 1712 4

原创 最短路变形 加法换成乘法 求连续相乘最短路与最长路总结

乘法最短路问题普通的最短路问题是将路径上的所有边的权值相加,求最小权值和的一条路。但这里的变形是将加法换成乘法,求最小权值积的一条路。这里我们可以用dijkstra或spfa来做,只是将加号换成乘号即可。我们的更新语句就是:if(dis[v] > dis[u] * w[i]) //v是循环的点,u是上一次被修改过的点{ dis[v] = dis[u] * w[i];}注:这里保证所有边的权值都是非负数,因为一旦出现负数,相乘之后最小值会变成最大值,最大值会变成最小值,就非常难了,需要同时

2021-04-05 12:14:06 465 2

原创 扫描线与自适应辛普森积分 求多边形面积并

求多边形面积并就是说在二维平面上给你一堆多边形,然后求所有面积的并集,重叠的地方只算一次。就相当于一张桌子上随意放了一堆多边形,求占桌子的总面积。求面积并问题一般用两种方法,扫描线和自适应辛普森积分。扫描线就是从左到右,用一条条竖直的线将所有多边形按照竖直的边分成一个个小矩形,一般适用于各边都是直的多边形,例如矩形,三角形。具体一点可以看下图:有四个黑色的矩形随机的放在一起,然后我们用这些红线从所有的矩形的竖直边将整个图分成若干长条,使得每个长条内没有矩形的竖直边。这些就是扫描线。这样操作之后,

2021-03-30 10:02:23 496

原创 计算几何之 旋转卡壳 代码模板与证明

旋转卡壳旋转卡壳这个算法很形象,一般用来在O(nlogn)O(nlogn)O(nlogn)的时间复杂度下求最远点对问题,就是求平面中任意两点的最远距离。

2021-03-19 13:22:47 762 1

原创 三维计算几何之三维凸包 增量法

三维凸包三维凸包就是将凸包放在三维中求。在三维空间中有一堆点,现求一个多面体将所有点全部包住的最小凸多面体。这里可以类比一下二维的凸包。这个凸多面体有一个性质:他是包住所有点的多面体中表面积最小的。三维凸包的求法三维凸包的求法可以类比二维凸包,但三维凸包的核心还是暴力,暴力的去求。这里主要用一个增量法的思想。这里要清楚组成三维凸包的不是二维凸包中的一条条线段,在这是一个个平面,由这些平面组成的凸多面体就是三维凸包。和二维一样,我们先确定一个平面,然后不断地往里加点,每次加一个点,更新一下凸包,直

2021-03-17 16:58:47 3410

原创 奇怪的小鸭子也增加了

奇怪的小鸭子折磨啊,咋交咋不对,咋看咋都对。不就算用2×a−12\times a-12×a−1和2×b−12\times b-12×b−1的矩形填充A*B的浴盆,然后判断最下面一行能放下宽为a的矩形不?和最后一列能发现长为b的矩形不?如果都能的话,右下角肯定还能再放一个,再加一就是答案嘛。但是为啥不对呢???为啥呢?原因是题目并没说小鸭子只能放在整数位置呀,如果放在小数位置呢?我是不是就能放的更少了。所以我先用2×a−0.000012\times a-0.000012×a−0.00001和2×b

2021-03-14 14:02:35 1447 7

原创 最小圆覆盖问题 算法步骤与证明+代码模板

最小圆覆盖定义最小圆覆盖问题是什么呢?就是指在二维平面上有一堆点,然后我们要求一个最小半径的圆能够将所有点全部都包住,这就是最小圆覆盖问题。最小覆盖圆的性质性质1:最小覆盖圆是唯一的证明:我们假设有两个圆O1,O2,他们半径都是r,都是最小覆盖圆,那么所有的点一定在两圆的交集部分。那我们以两圆交集部分的弦长为直径,做一个新圆,该圆依旧包含所有点,而且他的直径是原来圆的弦长,一定是小于原来圆的直径的,因此和原来的圆是最小覆盖圆相矛盾,所以最小覆盖圆是唯一的。性质2:若圆O1是点集S的最小覆盖圆,则

2021-03-13 20:47:28 13195

原创 计算几何之 半平面交 代码模板及过程证明

半平面交定义首先要了解半平面交是什么,简单来讲,就是一堆直线,我们只取他的一边,所构成的区域就是半平面交。比如,有4条有向直线,我们都只取直线左边的那一部分,所有直线左边平面的交集就是半平面交。如下图所示,蓝色区域就是四条直线左边平面的交集:半平面交求法了解了什么是半平面交后,我们看一下他的求法。和求凸包一样,分为两步。第一步:将所有直线按倾角从小到大排序第二步:从小到大枚举每条边来维护一个双端队列。...

2021-03-11 22:13:19 276

原创 计算几何之 凸包 Andrew算法 代码模板与实现过程

凸包的定义啥是凸包呢?我们不严谨地把这个词拆开来看,凸是指凸多边形的意思,包是指包住所有的点,因此凸包就是一个包住所有的点的凸多边形。简单来说,就是给你n个点,将这n个点的最外层的点连起来,将所有的点包在内部,这就是这n个点的凸包。可以想象这n个点都插了一根柱子,然后用一个橡皮筋将所有的柱子套住,然后再松开,橡皮筋所包住的图形就是这个凸多边形。凸包的求法凸包的求法有很多种,有Graham扫描法、Jarvis步进法等等,掌握一个就行,这里讲一个简单一点的方法Andrew算法。Andrew算法是Grah

2021-03-10 11:53:46 709

原创 Acwing 2935:信用卡凸包 (计算几何问题转化 + 凸包)

原题链接传送门:Acwing 2935:信用卡凸包题目大意给n张信用卡,每张大小都一样,然后给每张卡的四角进行圆滑处理,即割一个14\frac 1 441​圆。然后将n张卡放在平面上,求这n张卡的凸包,如下图所示:输入信用卡的长宽和小圆半径,然后输出n张卡中心的坐标以及旋转的角度。求凸包周长。思路这道题一看是凸包,但又不太一样,这里的每个点都不是一个点,而是一个圆弧,这就没法直接用凸包算了。所以我们就得向普通凸包转化,我们就看一下这个信用卡凸包的几何特征!如图:注意这里的圆弧都不一定是等长

2021-03-10 11:50:26 250

原创 POJ 3304:Segments & Acwing 2984:线段 (计算几何基础 枚举 判断点在直线两侧)

题目链接POJ 3304:SegmentsAcwing 2984:线段题目大意有n条线段,给出所有线段的两端点,判断是否存在一条直线,使得所有线段到这条直线上的投影都有交点,若存在输出Yes!,否则输出No!。思路首先要找这条直线不好直接找,所以我们就要将问题转化一下,若存在一条直线1和所有线段都有交点,则一定存在一条和该直线垂直的直线2,使得所有线段到直线2上的投影都有交点,交点就是所有线段和直线1的交点在直线2上的投影。如下图:那么这样就好找这条直线了,因此这就将问题转化成了求一条直线和

2021-03-08 19:33:47 253

原创 计算几何之 判断两线段是否相交 代码模板与证明

判断两线段是否相交已知两线段a1a2a_1a_2a1​a2​和b1b2b_1b_2b1​b2​,判断是否相交代码模板bool segment_intersection(Point a1,Point a2,Point b1,Point b2){ double c1 = cross(a2 - a1,b1 - a1), c2 = cross(a2 - a1,b2 - a1); double c3 = cross(b2 - b1,a2 - b1), c4 = cross(b2 - b1,a1 - b1)

2021-03-07 09:24:50 413

原创 计算几何之 点在直线上的投影 代码模板与证明

点在直线上的投影已知直线上两点a、b和直线外一点p,求p在直线ab上的投影点代码模板Point projection(Point p,Point a,Point b){ Vector v = b - a,u = p - a; return a + v * (dot(v,u) / dot(v,v)); //dot是两向量的点积}证明如下图,p的投影点p’就是a+x⃗\vec xx(直线的点向式),所以我们只要求出x⃗\vec xx就能求出p’了。而x⃗\vec xx = tv⃗\vec

2021-03-07 08:44:40 3168 1

原创 计算几何之 点到直线的距离&点到线段的距离 代码模板与证明

点到直线的距离已知直线上两点a、b,和直线外一点p,求p到直线ab的距离。代码模板double distance_line(Point p,Point a,Point b){ Vector v1 = b - a,v2 = p - a; return fabs(cross(v1,v2) / len(v1));}证明这里的v1是直线上的一个向量,v2是v1同起点,指向直线外点p的向量,p到直线的距离就等于两向量的叉积除以v1的模。这里两向量的叉积就是三角形PAB的面积的两倍,就等于底乘高,然后

2021-03-06 19:28:04 2078

原创 计算几何 之 判断两直线是否相交并求两直线交点 代码模板与证明

判断两直线是否相交 并 求两直线交点首先判断两直线的向量v⃗\vec vv与w⃗\vec ww的叉积是否为0,若为0说明两向量作为邻边构成的平行四边形面积为0,说明两向量平行或重合,则两直线无交点。否则就相交,然后根据下面的函数模板求交点。代码模板double cross(Point a,Point b){ return a.x * b.y - b.x * a.y;}Point intersection(Point p,Vector v,Point q,Vector w){ Vecto

2021-03-06 10:53:20 3062 2

原创 NOI2008 & Acwing 969:志愿者招募(特殊的建图 与 无源汇|上下界|最小费用|可行流)

题目链接传送门:Acwing 969:志愿者招募题目大意奥运会要开n天,这n天每天分别至少需要Ai个志愿者。现总共有M类志愿者,其中第i类可以从第Si天工作到第Ti天,招募每人所需的费用是Ci元。求总费用最小是多少。思路我们把这n天的每一天看作一条边,流量就是志愿者,每天的边都有个流量下界即每天所需的最少人数。然后现在要满足第Si天到第Ti天这些人的流动,我们从Ti+1点向Si点连一条容量为正无穷,费用为Ci的边,就满足了这一类志愿者在Si到Ti天间流动,并且还满足了流量守恒,如下图:然后我们

2021-03-04 23:10:35 143 1

原创 [网络流24题]洛谷P1251 / Acwing 2184: 餐巾计划问题(建图+拆点+最小费用最大流)

题目大意原题链接:Acwing 2184: 餐巾计划问题一个餐厅运营n天,每天分别需要n1,n2…张干净的餐巾,每天能获得餐巾的方式有三种,一是新买,一张p元;二是之前买的用完后送到快洗店,需要洗k天,一张ff元;三是用完后送到慢洗店,需要洗m天,一张ss元。新毛巾和洗好的毛巾不能储存,但是脏毛巾可以储存在餐厅,费用为0。现在问假设最开始时没有餐巾,要满足这n天的餐巾需求,n天总共要花多少钱?思路把餐巾想象成一个流,就会发现可以用网络流来解决这个问题。将每一种餐巾使用方案转化成一个可行流的方案,将费

2021-03-04 12:40:09 146 1

原创 Acwing 2326:王者之剑(网格图之网络流 最大权独立集)

原题链接传送门:Acwing 2326:王者之剑题目大意给一个网格图,每个点是宝石的数量,现在从0秒开始可以从任意一个点作为起点开始走,每秒顺序执行下面三件事:1、拿走该点的宝石。2、如果当前是偶数秒,清空上下左右四个相邻的点的宝石。3、向上下左右四个相邻的点走一步或原地不动。问取得宝石数量最多是多少?思路看到网格图,可能有人就会敏感的想到网络流了。我们要先分析一下取宝石的过程,会总结出两个性质:①我们只能在偶数秒取宝石。②不可能同时拿走相邻格子上的宝石。这两个性质不难证明,因为偶数秒会清空相邻的

2021-02-28 09:41:32 391

原创 最小权点覆盖集 与 最大权独立集

一、最小权点覆盖集这里我们来看特殊的最小权点覆盖集,就是对于二分图而言的。什么是点覆盖集呢?就是图中所有点的一个子集,首先他是一个点集,然后图中所有边的两个端点的其中一个都在这个点集中,就是说这个点集覆盖了所有边。那么对于每个点我们给他一个权值,所有点覆盖集中,总权值和最小的一个就是所说的最小权点覆盖集。二、具体做法我们利用最小割来求解最小权点覆盖集,首先我们是在二分图上来做,其次所有点权都要是正数(要做网络流的流量)。我们将所有二分图的点看成两个集合X和Y,从s向所有X集合的点连一条容量为点权的边,

2021-02-27 18:17:13 3481

原创 POJ 2125 Destroying The Graph && Acwing 2325. 有向图破坏(拆点+最小权点覆盖集)

原题链接POJ 2125:Destroying The GraphAcwing 2325:有向图破坏题目大意我们要删除一个有向图中的所有边,有两种删法,一是删除某点的所有入边,二是删除某点的所有出边,他们的费用不同,分别是W+和W-,我们要求一种方案,使得删除所有边的总代价最小。思路我们要删除某一条边<a,b>有两种删法,删除a的出边或是b的入边,我们肯定是要费用最小的那种删法,对于一个点他有两种属性,一是作为终点,二是作为起点,因此我们就想到了拆点,将一个点拆成a+和a-,分别表示

2021-02-27 15:58:49 329

原创 最大密度子图

最大密度子图首先要了解什么是最大密度子图,顾名思义,就是所有子图中密度最大的那一个。那么什么是一个子图的密度呢,这里规定子图的密度就是子图中边数和点数的比值。

2021-02-24 17:17:10 1896

原创 最大权闭合子图

闭合图首先,先了解什么是闭合图。闭合图一般指一个图中点的集合,从该集合中所有的点出发,能到达的点要求都必须在该点集中。也就是说,从该集合中出发,一定要回到该集合中,不能出到集合外。最大权闭合图,顾名思义,就是所有闭合图中点权之和最大的那个,注意这里的权指的是点权,因为闭合图是对于点集而言的。...

2021-02-20 15:37:33 1891

原创 AcWing2279 网络战争 (01分数规划+网络流 最小割模型)

原题链接:AcWing2279 网络战争题目大意给一个无向带权图,求将s和t分开的一个边割集,使得割集的平均边权最小,即最小化∑e∈cwe∣c∣\frac{\sum_{e\in c} w_e}{|c|}∣c∣∑e∈c​we​​。思路见到最小化平均值,就会想到二分模型,然后我们就判断这个值有没有二段性,能否用二分。又看到求和除以数量,就想到01分数规划,...

2021-02-14 22:26:59 189 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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