图论
文章平均质量分 56
yuukilp
Full Of Curiosity
展开
-
UVA 11354 Bond
题意: 给定一个无向带权图,有一些询问,问u,v点之间的路径上最大边权值的最小为多少?也就是问u,v之间的最小瓶颈路的最大边长为?思路: 首先的话,求出最小生成树( 瓶颈树的求法,不会自行百度 ),这样树上点u,v之间的路径唯一,且路径上的最大值即为答案,所以问题就转化为了如何快速求解u,v之间路径的最大边权。 解决上面问题的做法就是倍增法。类似于区间RMQ问题,只不过转化为树上原创 2015-09-25 18:59:17 · 737 阅读 · 0 评论 -
HDU 5093 Battle ships
HDU 5093 Battle ships题意: 给定一个地图,含字符 ‘*’ ‘#’ ‘o’,然后战舰只能放置在字符∗*上面,且一行或一列不能同时放置两个战舰,除非中间间隔有字符#,问最多能放置多少个战舰?思路: 1.就是一个二分图匹配,听说是陈题,但是觉得建图方式比较特别,所以mark一下,主要是理解一下建图的过程! 2.首先缩点一下,就是同一行或者同一列,如果中间没有字符#原创 2015-07-13 12:55:24 · 376 阅读 · 0 评论 -
Light OJ 1094 - Farthest Nodes in a Tree
两次bfs就可以解决树的最大直径了,原创 2014-07-16 10:39:36 · 1410 阅读 · 0 评论 -
POJ 3159 Candies
题意: 给n个人派糖果,给出m组数据,每组数据包含 A,B,CA,B,C 三个数, 意思是 AA 的糖果数比 BB 少的个数不多于 CC ,即 BB 的糖果数 - AA 的糖果数 ≤c\le c 。 最后求 nn 比 11 最多多多少糖果。思路: 学习下差分约束的做法。 总体来讲还是比较好理解的,根据形如 a−b≤ca - b \le c 多个不等式建图,形成一个约束原创 2016-01-16 00:14:51 · 345 阅读 · 0 评论 -
Light OJ 1300 - Odd Personality
题意: 给定一个无向图,没有自环和重边,问图中总共有多少个点满足从这个点出发不经过重复的边且经过边的数目为奇数?思路: 不经过重复的边回来,就是不经过桥,也就是这个点处于一个强连通分量中。 也就是求个强连通分量就好了,但是怎么判断是否存在路径为奇数呢? 也就是说强连通分量中是否存在奇环?直接染色?如何证明? 这里有个定理:强连通分量中如果存在奇环,那么这个连通分量原创 2015-12-25 00:43:36 · 616 阅读 · 0 评论 -
Light OJ 1308 - Ant Network
题意: 给一个无向图,每个点都有蚂蚁,一旦摧毁掉某个点后,所有点上的蚂蚁必须都能跑到庇护所,问最少需要在多少个上安排庇护所使得,任意一个点摧毁后,所有蚂蚁都是安全的?思路: 首先如果给定的图为一个连通块的话,那么至少需要2个点。 接下来就求一下图内的割点。 对于一个联通块内,如果有多于一个割点的话,这样是不需要放置庇护点的,因为只能摧毁掉一个点,我可以选择其他一个割点去庇护所。原创 2015-12-23 16:06:11 · 917 阅读 · 0 评论 -
POJ 2594 Treasure Exploration
题意: 给定有向无环图,每个人只能沿着方向走,并且不能走相同的点。 问最少需要多少个人可以覆盖到所有点?每个人起点可以任意选择,不同的人走过的点可以重复。思路: 与最小点覆盖不同的是这个问题允许路径重复点,也就是对于每条路径来说,点是可以重用的,所以可以预处理出每个点可以到达的节点然后连边建一个新的图,然后跑一边最大匹配,这样就解决了点重用的问题! 变型:Light OJ原创 2015-12-26 16:47:16 · 369 阅读 · 0 评论 -
Light OJ 1429 - Assassin`s Creed (II)
与POJ 2594类似,只不过这里给的是一个有环的图!还有每个人可以走重复的点,任意访问多次都行,只要可达即可。解法也类似,只不过这里先要缩点,因为同一个强连通分量内的点都相互可达嘛,所以直接缩点就好了!代码:#include <cstdio>#include <cstring>#include <vector>#include <queue>#include <stack>using n原创 2015-12-26 17:05:42 · 536 阅读 · 0 评论 -
TC SRM 680(div 2) 1000pts
题意: It’s a well-known fact that Limak, as every bear, owns a set of numbers. You know some information about the set: The elements of the set are distinct positive integers. The number of eleme原创 2016-01-29 02:17:03 · 751 阅读 · 0 评论 -
CodeForces 653D Delivery Bears(网络流)
题意: 给定一个有向带权图,现在有x个人,每个人手上的物品重量都一样,每个人只能走一条简单路,问从 11 到 nn 的最大流量值为?思路: 首先,直接去跑最大流,肯定是不行的,因为在最大流的过程中,可能会出现从某个节点流出的流量分流,这样就不能保证 每个人的 流量值是一份不会经过分流的流量。 所以需要变换一下,二分每个人的初始流量值 vv,然后重新建图,图中边权变为 w/vw/v原创 2016-04-01 09:24:48 · 877 阅读 · 0 评论 -
HDU 5638 Toposort
题意: 给定一个 DAG,准确地删除 kk 条边,求可以得到的最小的拓扑序! (1≤n≤100000,0≤k≤m≤200000)(1 \le n \le 100000, 0 \le k \le m \le 200000)解释: 数据结构 + 拓扑排序 不错的题 题目要求字典序最小,所以应该尽可能的把小的数放在前面,假设当前还剩余 kk 条边可以删除,那么我就需要去找所有入原创 2016-03-07 20:45:55 · 448 阅读 · 0 评论 -
TC SRM 684 Div2 900pts
题意: 给定一个有向图,可能会有重边和自环。问是否会有一条路径使得图中每个点都至少被访问一次。n≤50n \le 50解释: 其实这题并不难,因为数据范围较小,所以可以有很多方法暴力解决! 看了一下TC的官方题解,感觉学到了一波姿势! 第一点 : 首先肯定是要缩点,一般是Tarjan咯! 题解是提供了一种 N3N ^ 3 的缩点的方法: 用邻接矩阵表示这个图,然原创 2016-03-12 21:39:14 · 572 阅读 · 0 评论 -
TC SRM 683 Div2(1000pts)
题意: 给一棵树,求这棵树的所有连通子图的点的数量之和?(n≤105n \le 10^5)解释: dfs+dp dfs + dp 很好的题! dp[u]dp[u] 表示以 uu 为根节点的不同的子树的数量,S[u]S[u] 表示 以uu 为根节点的所有不同子树的节点的数量之和 那么对于叶子节点:dp[u]=S[u]=1dp[u] = S[u] = 1 转移:(vv 为原创 2016-02-29 22:23:49 · 465 阅读 · 0 评论 -
hihocoder1158 质数相关
题意: 两个数aa和 bb (a<ba<b)被称为质数相关,是指 a×p=ba × p = b,这里pp是一个质数。一个集合SS被称为质数相关,是指SS中存在两个质数相关的数,否则称SS为质数无关。如{2,8,17}\{2, 8, 17\}质数无关,但{2,8,16}\{2, 8, 16\}, {3,6}\{3, 6\}质数相关。现在给定一个集合SS,问SS的所有质数无关子集中,最大的子集的大小原创 2017-11-19 20:41:58 · 303 阅读 · 0 评论 -
GCJ 2018 Round 2
占坑,明天过来补题解A模拟 + 贪心Bdp,简单背包C建图,经典二分匹配原创 2018-05-20 01:58:13 · 646 阅读 · 0 评论 -
HDU 4975
关键词: 最大流,多解性转化为判环。题意: 给一个N∗MN*M的矩阵,矩阵内每个数为0−90-9,已知矩阵每一行和每一列的值,判断是否有解?若有是否有多解?思路: 对于这一类矩阵的题,第一反应就是分别以行和列为点去建边,比较为难是想到用网络流来解决这个问题,一旦知道了是网络流的模型,对于这题来说建边什么的就很简单了! 跑一个最大流,注意N∗M≤1000N*M\leq1000,所以点的原创 2015-08-03 23:44:59 · 514 阅读 · 0 评论 -
Codeforces Round #316 (Div. 2) D. Tree Requests
Codeforces Round #316 (Div. 2) D. Tree Requests题意: 给一棵树,每个节点上都唯一对应一个单词,给M个询问,问节点u的子树中,深度为h的节点上所有的单词以任意次序组合起来能否构成回文串?思路: 首先呢,我们必须得处理出内节点所在的深度,而且得知道对应深度下有哪些节点存于vector数组H[d]中,但是问题就是询问仅涉及到节点为u的子树的哪些节点原创 2015-08-16 15:07:34 · 605 阅读 · 0 评论 -
UVA 11280 Flying to Fredericton
题意: 给定一个带权有向图,要求回答询问,在经过节点数不超过 ss 的条件下,问从 SS 到 TT 的最短路径! 数据范围: N(2≤N≤100),M(0≤M≤1000),Q(1≤Q≤10)N (2 ≤ N ≤ 100) ,M (0 ≤ M ≤ 1000) ,Q (1 ≤ Q ≤ 10) 思路: 因为对中途经过的节点数有限制,所以得记录下这一信息! 直接对图进行一遍原创 2015-09-25 19:18:15 · 496 阅读 · 0 评论 -
【图论】最大密度子图&权闭合图
最大权闭合图:描述: 给定一个点带权的有向图,求这个图的最大权闭合图? * 闭合图含义:图中任意的出边所指的点都在图中的点集内。解法: 建图: 一个超级源点s,超级汇点t。 s连接所有点权为正的点,容量是点权。 所有点权为负的点连接汇点t,容量的点权乘以-1。 原图中 a->b,那么连接 a b,容量无穷大。 求出最大流,那么所有正点权的和减去 最大流原创 2015-09-17 23:32:52 · 5745 阅读 · 0 评论 -
UVALive 4288 Cat vs. Dog
思路:要求最多满足条件的人数,我们把有冲突的两个人之间连一条边,有冲突是指一个人喜欢的猫正好是另外一个人讨厌的猫,或者一个人喜欢的狗正好是另外一个人讨厌的狗,那么问题就转化为最大独立集了,也就是最大的点集使得点之间不存在边。最大独立集=顶点数 - 最大匹配。 代码君:#include #include #include #include #include #include #i原创 2015-09-09 21:33:16 · 484 阅读 · 0 评论 -
UVA 11090 Going in Cycle!!
思路: 具体题解大白书上写的很清楚。重要是体会这种转化的过程和思路,二分枚举最小的平均值,然后经过式子变形后转化为判断新建边权的图中是否存在负环,思路好巧妙啊!SPFA一个最重要的应用就是判负环,而这样的应用又可以间接用来解决其它问题! 代码君:#include #include #include #include #include #include #include #原创 2015-09-09 21:42:18 · 489 阅读 · 0 评论 -
网络流例题总结
POJ 3436题意: 生产1台电脑需要n个机器,每个机器对运过来的未加工好的机器加工,每个机器每小时有最大的生产电脑量,每台电脑有p个部分,且每台机器只会接受满足条件的未加工好的电脑,问一小时内最大的生产量?思路: 属于比较裸的最大流,按照条件建边即可,注意每一台机器有最大的生产量C,这个可以当做流入这台机器的最大流量,但是考虑特殊情况,我们必须去拆点才能建立正确的图,也就是每台机器拆成原创 2015-08-01 21:39:54 · 1863 阅读 · 0 评论 -
【图论】DAG上的相关问题
DAG上的最小点路径覆盖描述: 在图中找尽量少的路径,使得所有点都被覆盖且只被覆盖一次,注意一个单独的点也可算一条路径!思路: 把所有节点的 ii 拆为 XX 部中的 ii 和 YY 部中的 II 两个点,如果G中存在边 i−>ji->j ,则在二分图中建边 i−>Ji->J 。设二分图中的最大匹配为mm ,则最小点路径覆盖为 n−mn-m 。 注意这个不适用于非DAG图,可适用原创 2015-09-16 00:08:54 · 897 阅读 · 0 评论 -
无向图的割顶和桥
定义: 1.对于无向图,如果删除某个点u后,连通分量的数目增加,称u为图的关节点或割点。对于连通图来说,删除割点后,图将变得不再连通。 2.设 low(u)low(u) 为u及其后代所能连回的最早的祖先的pre值,当u的后代只能连回u自己时,即 low[v]>pre[u]low[v]>pre[u],只需删除边 u−>vu->v,即可让图非连通了,满足这个条件的边称为桥,也就是我们不仅知道了原创 2015-08-11 23:14:19 · 1767 阅读 · 0 评论 -
图论中dfs判断是否可行一类问题的写法
有一次比赛中就是类似dfs染色判断是否可行,当时就蒙了!没写出来,今天贴一小段代码,虽然说特别傻逼哈~ bool dfs(int u,int pd){ c[u]=pd; //cout<<u<<" "<<pd<<endl; for(int i=1;i<=n;i++) if(G[u][i]){ if(c[i]!=-1) { if(c原创 2015-08-01 16:22:00 · 464 阅读 · 0 评论 -
SPOJ Optimal Marks(最小割的应用)
SPOJ Optimal Marks(最小割的应用)真心好题,网络流简直无处不在,能够解决一些看似困难的问题,希望能从中学到其精髓—-模型建立+建图题意: 给定一个无向图,每个顶点都有对应值,每条边的权值为val[u] ^ val[u],同时已知其中某些点的值,求其他点的权值使得最终的图的边权和最小?分析: 首先边与边之间异或操作,不太好直接处理,因为异或操作每一位运算相互独立,我们来逐位原创 2015-08-31 11:07:52 · 675 阅读 · 0 评论 -
图论训练总结
开始打组队赛啦,正式负责做图论方面的题了,所以在慢慢刷这些个神题!链接地址: VJ比赛地址UVAlive 5903 Piece it together题意: 给定一个图形,W,B 分别代表白色和黑色,一个黑色与两个白色方格组成一个L形状,问你用这个L形状是否能恰好成想要的形状!思路: 开始是准备用网络流跑一发,自己建图建的比较丑,结果T了,后来改为二分图匹配才过。 建图是这样的,因为原创 2015-08-12 23:10:19 · 498 阅读 · 0 评论 -
0/1分数规划理解
引入: 分数规划的一般形式: 最小化: v=f(x)=a(x)b(x),b(x)>0v=f(x)=\frac{a(x)}{b(x)} , b(x)>0, 假设: v∗=f(x∗)v^*=f(x^*) 为该规划的最优解,变形后: 0=a(x∗)−v∗⋅b(x∗)0=a(x^*)-v^*\cdot b(x^*) 我们构造g(v)g(v) 函数: g(v)=min{a(原创 2015-08-26 13:18:29 · 1091 阅读 · 0 评论 -
sgu 252 Railway Communication
题意: 就是给你一个带权的DAG,求把所有点都覆盖的路径最少有多少条,且同时保证权值最小,并输出路径方案!思路: DAG上的最小点覆盖,直接上二分图匹配就行了,但是要求权值最小,一种方法就是转化为费用流来求解,另外就是KM算法(可以来求解最大或最小权值)。代码:#include <cstdio>#include <cstring>#include <queue>#define IN原创 2015-11-24 12:53:49 · 343 阅读 · 0 评论 -
HDU 5503 EarthCup
题意: 有NN(N≤50000N\leq 50000 )支球队,每两支球队之间都会有一场比赛,没场比赛胜利记1分否则记0分,给出这NN支球队的分数,问能否构造出每场比赛的结果,使得最后的分数成立?思路: 首先,一眼看上去的网络流做法就不说了,比较容易想到,但是问题是NN太大,所以必定是行不通的! 考虑一个二分图,X部为C2nC_n^2场比赛,而Y部,把每个球队所得分数aia_i拆原创 2015-10-10 23:18:34 · 790 阅读 · 0 评论 -
codeforces Gym 100431G Persistent Queue
啥都别说了!真心好题!在线在树上找LCA的关键地方就在于这个,一定要好好理解它!题意: 给一些操作,包括在末尾加一个数或者是删除最前面的一个数,而每次操作是先复制第v个操作留下的序列,再进行加数或删除数的操作,最后得到一个新的序列。问每次删除的数是多少!思路: 比较容易想到的是:把这些操作看做树上的点,对每一个操作都去维护一下它的头节点和尾节点。 第i个操作: 1...v..c1..原创 2015-08-17 23:44:37 · 522 阅读 · 0 评论 -
CodeM2018 初赛A轮 第四题:迷宫
题意: 一个 n∗mn∗mn*m 的网格迷宫(会有一些墙),现在迷宫内取KKK个点,两点之间的距离为迷宫内的最短距离,求要形成这KKK个点的最小生成树(边权即为最短距离),其权值为多少?(n,m≤2000n,m≤2000n, m \le 2000)思路: 这个题思路很容易想出来,就是多源点的BFS,然后其中套一个Kruskal最小生成树算法就行了。比赛中,只过了65%的tes...原创 2018-06-19 16:36:37 · 450 阅读 · 0 评论