![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
图论
FeBr2
(๑•̀ㅂ•́)و✧
展开
-
二分图匹配——HDU 5943
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5936题意:给定 s,n,判断 s+1,s+2,...,s+ns+1,s+2,...,s+n 这 n 个数能否放到 1,2,3,...,n1,2,3,...,n 的位置上(如果 xx 可以放到 yy 上,则必须满足 x mod y=0x\ mod\ y = 0)分析:这题是一道很明显的二分图匹配,但是因为原创 2017-05-06 11:14:55 · 479 阅读 · 0 评论 -
图论点、边集和二分图的相关概念和性质
参考链接: http://dsqiu.iteye.com/blog/1689505概念:最小点覆盖: 点覆盖集即一个点集,使得所有边至少有一个端点在集合里。或者说是“点” 覆盖了所有“边”。最小点覆盖(minimum vertex covering)就是点最少的点覆盖。最小边覆盖: 边覆盖集即一个边集,使得所有点都与集合里的边邻接。或者说是“边” 覆盖了所有“点”。最小边覆盖(minimum原创 2016-10-09 12:12:16 · 1079 阅读 · 0 评论 -
树的直径(图中最长路)——hiho 1050
题目链接: https://hihocoder.com/problemset/problem/1050分析: 给出一棵树,求出这棵树的直径(即最长的路)。 PS:每两个点之间只有一条边。题解: 任意从一点开始DFS,找到它能到达的最远点,这一点肯定是树直径上的一个端点,再从这一点开始进行DFS,直到最远点,记录下中间的距离,这个最远点就是树的直径的另一个端点,这个距离即树的直径。AC代码原创 2016-10-07 14:12:58 · 852 阅读 · 0 评论 -
欧拉回路——John's trip ( POJ 1041 )
题目链接: http://poj.org/problem?id=1041分析: 一共最多44个路口,1995个街道,每次给出x,y,z表示x路口和y路口由z街道相连接,第一行给出的两个路口里最小的为起点,并且每条路口最多走一次。求从起点出发,能否走遍左右路口,若能则输出路径即街道序号(要求字典序最小)题解: 这是一道很明显的欧拉回路,并且是无向边。判定:无向边直接记录度数,如果有度数为奇数原创 2016-10-05 19:21:00 · 466 阅读 · 0 评论 -
混合图求欧拉回路——Sightseeing tour ( POJ 1637 )
题目链接: http://poj.org/problem?id=1637分析: 给出N个点,M条边(有向或者无向),求这个图里是否存在欧拉回路。题解:一般图欧拉回路判定无向图: 每个点的度数都是偶数。有向图: 每个点的入度等于出度。混合图欧拉回路判定判定度数: 记录入度和出度的时候,对无向边任意定向。 如果存在欧拉回路,那么可以得到每个点入度与出度之差为偶数,否则就一定不能构成。网络流原创 2016-10-05 16:56:02 · 363 阅读 · 0 评论 -
2-SAT (染色法)—— Peaceful Commission (HDU 1814)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1814分析: 给出N个党派,每个党派有2i-1和2i两个代表,每一组里只能有一个党的一个带包,给出M对代表间的矛盾关系,求将这2N个党派分别分成N个人一组,输出字典序号最小的一组解。题解: 对立关系:党派中两个代表矛盾关系:给出的M对关系建边: 若a与b矛盾,建边:a->~b,b->~a。然后原创 2016-10-04 22:14:29 · 569 阅读 · 0 评论 -
2-SAT ( Tarjan )——Wedding (POJ 3648)
题目链接: http://poj.org/problem?id=3648分析: 给出N对夫妇,标号从0~(N-1),标号为0的夫妻为新娘和新郎,丈夫和妻子不能在同一侧,再给出M对关系,有关系的人不能同时坐在新娘的对面。题解: 对立关系:夫妻关系a与~a矛盾关系:如果挑选了人a在新娘对面,那么与他有关系的人b 一定 不能在新娘的对面,所以只能挑选~b在新娘对面。建边: 根据矛盾关系建立 a-原创 2016-10-04 21:20:23 · 432 阅读 · 0 评论 -
2-SAT ( Tarjan )——Get Luffy out ( POJ 2723 )
题目链接: http://poj.org/problem?id=2723分析: 给出2N把钥匙,一共分成 N 对,每一对钥匙只能用其中一把,再出M扇门,每扇门有两把锁,每把锁单独对应一把钥匙,打开一把锁就能打开一扇门,除开第一扇门外,想打开某扇门,必须先打开它前面那一扇。求在给定的条件下,最多能打开多少扇门。题解: 每一对钥匙只能用其中一把,这也是一道很明显的2-SAT问题。用一个一维数组原创 2016-10-03 14:44:51 · 391 阅读 · 0 评论 -
2-SAT(Tarjan)—— Get Luffy Out *(HDU 1816)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1816分析: 和POJ 2723差不多,不过每把钥匙可以属于多个组了。题解:对立关系:一把钥匙用或者不用矛盾关系:如果一扇门上的一把锁不能被打开,那么另外一把锁肯定能被打开。一个钥匙被使用,和它同组的钥匙就肯定不能被使用根据矛盾关系建边,根据对立关系判断有无解。AC代码: /*********原创 2016-10-03 16:42:05 · 399 阅读 · 0 评论 -
2-SAT (Tarjan)—— Katu Puzzle ( POJ 3678 )
题目链接: http://poj.org/problem?id=3678分析: 给出N个数字,值可以为0或者1,然后给出M个操作,每个操作对第a个数和第b个数进行 AND/OR/XOR 操作,并且结果要等于c。问这M个操作能否成功进行。题解: N个数,每个数可以为0(x)或者1(~x),这是一道很明显的2-SAT,但是怎么建边呢。 题中给出了M个操作,我们一一分析一下。 AND:若值为1原创 2016-10-03 11:30:34 · 396 阅读 · 0 评论 -
2-SAT ( Tarjan )——POJ 3207
题目链接: http://poj.org/problem?id=3207分析: 一个环上按顺序标上1-N个点,给出M条边,可以从圆外连接,也可以从圆内连接,求连接所有的边是否能够保证都不相交。题解: 每条边有两个状态,只能2选一,要么圆外,要么圆内,所以我们以m条边为点建图,若两条边在同一侧会相交,我们就建边。AC代码:/********************************原创 2016-10-02 21:53:58 · 290 阅读 · 0 评论 -
2-SAT (判断是否有解)——Party ( HDU 3062 )
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3062分析: 给出 n对夫妻,和m对矛盾关系,每对夫妻中只能有一个人出席,判断最后能否有n个人出席,就是一个很裸的2-SAT判断有无解的问题。题解: 1.建图:#define MAXN 4002 //4倍的点//#define MAXM 8000002 //n*n/2#de原创 2016-08-02 20:07:47 · 551 阅读 · 0 评论 -
最短路(建图)—— Meeting (HDU 5521)
题目链接: http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1013&cid=645分析: 给出 N 个点,给出M个集合,每个集合里的点可以互相抵达且耗时为tit_i,现在分别从1和n点出发,求在哪个点相遇耗时最小,若有多个解,则按递增序列输出题解: 若是每个点直接建边,来两发SPFA,肯定T到生活不能自理,因为这个图的原创 2016-10-01 19:37:10 · 369 阅读 · 0 评论 -
联通块缩点(图的BFS)—— ZOJ 3781
题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3781题意: 给出一个N*M的棋盘,每个格子有白色或者黑色的棋子,若2个同色棋子相邻,则称他们是联通的。每次可以选择一大块联通的棋子进行翻转,使整块变成另一种颜色,求最少要操作多少次才能使得整个棋盘的颜色一致分析: 题中很明显地提到了联通这个概念,我们首先会想到原创 2017-02-16 15:23:57 · 515 阅读 · 0 评论 -
DFS——完全图计算
题目链接:http://codeforces.com/problemset/problem/744/A题意: 给出N个点M条边,再给出K个点,K个点所在的联通分量互不相连,求在满足这个条件的前提下,图中最多能增加多少条边。分析L:K个点构成K个团,然后不属于这个K个联通分量的点再组成一个完全图,这个完全图再和K个联通分量里最大的那个连边,这样增加的边数最多AC代码:/************原创 2017-01-14 10:13:45 · 825 阅读 · 0 评论 -
二分图——HDU 6016
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6016题意: 给出n只公羊和m只母羊,给出k对公羊和母羊的关系,求有多少种 A-B-C-D (A,B,C,D各不相同)分析: 我们可以发现要求的 A-B-C-D 即一个二分图中相连的三条百边,于是我们可以枚举每一条边,然后计算它的两个端点能够再连几条边出去,累加即可AC代码:/**********原创 2017-02-25 23:46:36 · 445 阅读 · 0 评论 -
Tarjan 缩点——HDU 5934
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5934题意:给出N个炸弹的坐标爆炸半径还有引爆的花费,求爆炸所有炸弹所需要的最小花费。分析:我们发现如果炸弹A在B的爆炸范围内,同时炸弹B也在炸弹A的爆炸范围内,那么无论引爆哪一个,都会导致它们俩都爆炸,所以我们可以把A和B当做一个炸弹,花费为最小花费即可。同理,可以延伸到 n 个炸弹,如果引爆这 n 个原创 2017-05-06 10:38:31 · 425 阅读 · 0 评论 -
Tarjan求割点——HDU 4587
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4587题意:从一个无向图中删除任意两个点,求能得到的连通分量的最大个数分析:想要增加联通分量的个数,我们肯定想到是去删除割点。但是题中要删除2个点,所以我们第一次删除点时,不应该只奔着割点去,因为有可能删除一些非割点能够创造出新的割点,所以第一次删点应该枚举每一个点,第二次删除点就可以在删除第一个点原创 2017-04-16 11:06:12 · 465 阅读 · 0 评论 -
拓扑(有向图判断环)—— HDU 5961
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5961题意:中文题意见链接分析:因为 P∪QP\cup Q 为完全图。则如果 在 PP 中,如果存在 a→ba \rightarrow b 和 b→cb \rightarrow c ,而不存在 a→ca \rightarrow c 的话,那么 a—ca — c 这条边一定存在于 QQ 中,不管指向原创 2017-04-30 21:50:05 · 564 阅读 · 0 评论 -
生成树计数——SPOJ HIGH
题目链接:http://www.spoj.com/problems/HIGH/题意:给出一个无向图(权值为1),求有多少个生成树分析:这个祭出Matrix-Tree来,对于原图的联通矩阵,计算其Kirchhoff矩阵,然后求出其n-1大小的子矩阵的行列式,就是原图生成树的个数了。具体证明过程请看07年国家集训队论文AC代码:/*********************************原创 2017-04-29 16:32:08 · 417 阅读 · 0 评论 -
2-SAT+二分——HDU 1815
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1815题意: 给出N个谷仓的坐标,每个谷仓都有一些牛,再给出2个中转站的坐标,中转站之前是连通的,现在要在中转站和谷仓间修建一些路,使得每个谷仓之间都是连通的,并且使得谷仓之间的最大距离最小,输出这个距离。每两个坐标点之间的距离为曼哈顿距离。最后,因为有一些谷仓中的牛之间有矛盾,所以它们所在的谷仓不能原创 2017-03-15 11:47:40 · 412 阅读 · 0 评论 -
图论——AtCoder Grand Contest #C Squared Graph
题目链接: http://agc011.contest.atcoder.jp/tasks/agc011_c题意: 给出一个N个点,M条边的无向图(无自环,重边),现在构造出一个新图,有N*N个点,若在原图中存在边(a,b)和(a’,b’),则新图中存在从点(a,a’)到点(b,b’)的无向边。求新图中的联通分量的个数分析: In general, consider the following原创 2017-03-14 00:16:06 · 660 阅读 · 0 评论 -
贪心+树剖(假)—— HDU 5242
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5242题意: 给出一颗有根树,每个节点有一个权值,每个权值只可以被获取一次,从根节点走到任意一个叶子节点为完成一次游戏,问完成K次游戏能获得的最大权值为多少。分析:这题用到了一点树剖的思想:我们从根节点出发做一次深搜,在回溯的时候,在每个节点处保存最大权值的子树的indexindex,并保存这个最大原创 2017-04-09 10:40:29 · 435 阅读 · 0 评论 -
最小割——POJ 3469
题目链接: http://poj.org/problem?id=3469题意: 给出A,B两个内核,给出N个进程,每个进程在不同的内核花费不一样,再给出M个任务,每个任务是a,b两个进程在交换数据,如果在同一内核就不需要额外花费,如果在不同内核则需要额外花费。求N个进程都跑起来并且满足M个任务的条件下的最小花费。分析: 先不考虑M个任务,我们发现每个进程要么属于A,要么属于B,我们可以类比网络流原创 2017-03-10 17:36:23 · 638 阅读 · 0 评论 -
费用流——POJ 3686
题目链接: http://poj.org/problem?id=3686题意: 给出N个玩具,M个工厂,每个玩具在不同的工厂加工时间不一样,每个工厂同时只能加工一个玩具,求加工完所有玩具的最小时间(题中求的是最小平均加工时间,就是用总的时间/N)分析:我们发现在一个工厂加工N个玩具所需要的时间是 Total=a1+(a1+a2)+(a1+a2+3)+....+(a1+..+aN)=(N∗a1+原创 2017-03-07 00:36:17 · 311 阅读 · 0 评论 -
2-SAT——CodeForces #400 D
题目链接: http://codeforces.com/contest/776/problem/D题意: 给出N扇门的状态:开或者关,给出M个开关,每个开关控制任意数量门,按下开关,这些门的状态同时改变,但是每个门都恰好被2个开关控制,求能否将所有门都打开分析:对立关系:开关 用或者不用矛盾关系:如果某扇门是关闭状态,那么与它相关的两个开关a和b,就只能选择一个使用,不能两个不用:矛盾关系(原创 2017-03-09 17:08:53 · 455 阅读 · 0 评论 -
2-SAT——POJ 3683
题目链接:http://poj.org/problem?id=3683题意: 给出N个办婚礼的时间段,每次婚礼可以在这个时间段的开始D分钟或者结束D分钟举办,每个婚礼不能在同一时间举办,求能否成功举办这N个婚礼,并输出解分析: 对立关系:开头办——结尾办 矛盾关系:如果a婚礼在开头/结尾办 与 b婚礼在开头/结尾办重叠了,那么a婚礼的开头/结尾 与 b婚礼的开头/结尾办矛盾 建边然后输出标原创 2017-03-09 16:59:35 · 681 阅读 · 0 评论 -
二分图匹配——POJ 3057
题目链接: http://poj.org/problem?id=3057题意: 给出一个 N*M的房间,’X’代表墙,’.’代表一个人,’D’代表出口,每个出口每一秒可以通过一个人,每个人每一秒只能移动一格,求最少需要多少秒能将所以移出去分析:这个题可以用二分图来做,我们可以发现,在t时刻的每一扇门d都对应某一个人p,所以我们可以把t时刻能到达门d的所有人都和门建立边,然后进行二分图匹配,由于题原创 2017-03-05 22:33:23 · 340 阅读 · 0 评论 -
求割点割边——hihoCoder 1183
题目链接: https://hihocoder.com/problemset/problem/1183分析: 给出一个无向图,求出图中的所有割点和割边。题解: 从任意点开始Tarjan, 设置一个父亲数组表示当前节点的根节点,和一个标记数组表示该节点有没有被Tarjan。然后开始DFS搜索遍历。割点: ①对根节点u,若其有两棵或两棵以上的子树,则该根节点u为割点。 ②对非叶子节点u(原创 2016-10-15 12:06:17 · 399 阅读 · 0 评论 -
Tarjan(无向图双联通分量)——hihoCoder 1184
题目链接: https://hihocoder.com/problemset/problem/1184分析: 给出一个N个点,M条边的无向图,求出其最小双联通分量的个数,每个双联通分量用其中点的最小序号表示。题解: 双联通分量的个数 = 无向图中割边的数量计算一个双联通分量里的点,用一个stack来存储再标记AC代码:/*********************************原创 2016-10-15 21:45:30 · 564 阅读 · 0 评论 -
最短路Floyd——POJ 1125
题目链接: http://poj.org/problem?id=1125分析: 给出N个点,接下来给出N行:该行有num对关系,每对关系给出两个数a,b表示i点到a点的边权重为b。求出一点:从该点出发到达距离它最远的点的距离是最小的。题解: 最多100个点,所以直接Floyd,然后遍历一遍即可。AC代码: /****************************************原创 2016-08-28 19:18:43 · 462 阅读 · 0 评论 -
最短路SPFA——Big Christmas Tree ( POJ 3013 )
题目链接: http://poj.org/problem?id=3013分析: 给出N个点和M条边,每个点有它的权值,每条边也有它的权值,建造这条边的花费等于这条边的权值*另一端端点的子树所包含的点的权值和。求连接所有点以点1为根节点构造出一颗树的最小花费。题解: 通过计算可以推断出,每个点的权值会被计算多次,但是只有从根节点到该点的边才会乘以该点的权值,所以我们可以把问题转换为求根节点1原创 2016-08-28 17:42:40 · 641 阅读 · 0 评论 -
差分约束——Layout ( POJ 3169 )
题目链接: http://poj.org/problem?id=3169差分约束系统介绍: http://blog.csdn.net/liuzhushiqiang/article/details/9344919分析: 给除N个点,ML表示AB间距离小于D,MD表示AB间距离大于D,建图用差分约束模板即可题解 1.建图:struct node{ int v, w, next;原创 2016-08-02 21:02:23 · 337 阅读 · 0 评论 -
强连通分量 ( Tarjan,邻接链表 )——The Bottom of a Graph ( POJ 2553 )
题目链接: http://poj.org/problem?id=2553分析: 给出一有向图,求除所以出度为0的强连通分量,然后按顺序输出其中的节点。题解: 先用tarjantarjan求出所有的强连通分量,然后遍历所有点,如果某个点指向一个不在其强连通分量中的点,这个强连通分量的出度++,最后统计所有出度为0的强连通分量,然后输出其中的点。代码:1.建图:#define MAXM原创 2016-08-01 19:23:09 · 432 阅读 · 0 评论 -
强连通图 ( Tarjan,邻接矩阵 )——Network of Schools ( POJ 1236 )
题目链接: http://poj.org/problem?id=1236分析: N个学校之间有单向的网络,每个学校得到一套软件后,可以通过单向网络向周边学校发送该软件。 Q1:至少需要给多少个学校发放软件,才能使得所有的学校最终能得到软件。 Q2:至少需要增加几条传输路线,使得任意向一个学校发放软件后,经过若干次传输,所有学校都能得到软件。题解: 找强连通分量,缩点。记f[i]为缩完点原创 2016-08-01 21:44:06 · 2879 阅读 · 0 评论 -
割点与割边
割点: 如果从图中删去某点和与该点相关联的边后,图不再连通,那么这个点叫做割点(cut point)。割边: 如果从图中删去某条边后,图不再连通,那么这条边叫做割边或桥(bridge)。求割点割边: 基本思路:在DFS的过程中,记录每个点u在DFS树中的深度dep[u]以及该点可以到达的除其父亲外的最早被访问的点low[u];如果根结点有大于1个的儿子,那么根结点是割点。如果对于点u的某原创 2016-07-18 14:55:59 · 643 阅读 · 0 评论 -
二分图匹配(基础)——过山车 ( HDU 2063 )
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2063分析&题解: 这是道非常裸的二分图匹配,建好图后,直接用匈牙利DFS搜索即可。(这里采用遍历女生节点,找男生匹配,因为二分图以及给好了,并且确定左边是女生节点,右边是男生节点,所以可以这样做,如果混合给参考二分图匹配/判断中的匈牙利算法写法)关键步骤解释:DFS代码:bool DFS(i原创 2016-07-17 15:06:02 · 352 阅读 · 0 评论 -
二分图匹配(匈牙利算法)
详细讲解: http://blog.csdn.net/pi9nc/article/details/11848327以下为粗略概括:二分图定义: 简单来说,就是图中的点可以被分为两组,并且使得所有的边都跨越组的边界,则这就是一个二分图。另一个等价定义是:不含有“奇数条边的环”的图。匹配: 在图论中,匹配是边的集合,这个集合中任意两条边都没有公共定点。最大匹配: 一个图的所有匹配中,所喊转载 2016-07-17 13:05:19 · 455 阅读 · 0 评论 -
判断二分图——染色法
怎么判定一个图是否为二分图 从其中一个定点开始,将跟它邻接的点染成与其不同的颜色,最后如果邻接的点有相同颜色,则说明不是二分图,每次用bfs遍历即可。代码:#include <queue> #include <cstring> #include <iostream> using namespace std; const int N = 999; int col[N], Map原创 2016-07-17 15:41:47 · 4860 阅读 · 0 评论 -
二分图匹配——棋盘游戏 ( HDU 1281 )
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1281分析&题解: 题意是求最多可以放几个棋子,并且哪几个点是必须放子的,一看就是二分图匹配,匹配行和列,最后,搜索所有边,每次删除一条边,如果最大匹配变少了,这条边(就是棋盘位置)就是关键位置。AC代码:#include <iostream>#include <cstring>#incl原创 2016-07-18 10:17:39 · 666 阅读 · 0 评论