图论

DP&图论 DAY 7 上午

て烟熏妆下的殇ゞ 提交于 2019-11-27 05:16:52
DP&图论 DAY 7 上午 图论练习题 P2176 [USACO14FEB]路障Roadblock 先跑最短路(最多n条边,否则出环) 枚举每条边,加倍,再跑 dijkstra 取最大 P2939 [USACO09FEB]改造路Revamping Trails Solution 分层图最短路 从上一层到下一层,起点之间连边 Solution 暴力N^2建边 然后发现有一些边是没用的 假设存在3个点 (x1,y1) (x2,y2) (x3,y3) min( |x1-x3| , |y1-y3| ) = x3-x1 --->min( |x1-x2| , |y1-y2| ) + min( |x2-x3| , |y2-y3| ) 所以如果存在一条路径,st. point1--->point3 = point1-->point2 + point2-->point3 所以就把路径换成 1--2+2-->3 ,这样一定不会差 对于所有点,x从小到大排序,y从小到大排序,相邻两点之间连边,不允许跳点的跑路 跑最短路 P2502 [HAOI2006]旅行 Solution 。最小边越大,最大边也越大,不能满足二分性质 。枚举最小边,固定最小边,最小化最大边,最小生成树 kruscal 一开始 sort 一遍 枚举每个最小边,O(M) 克鲁斯卡尔 Solution 最近距离最远,可以二分 N^2连边

图论神仙题大赏

妖精的绣舞 提交于 2019-11-27 04:04:25
BZOJ 3445 Roadblock 先跑一边最短路,然后枚举最短路上的每条边,将路径翻倍然后跑Dijstra. 因为不在最短路径上的边没用贡献,然后最短路径最长为 n−1 复杂度 O(nmlogm) BZOJ 1579 道路升级 两维:k使用了多少次更新,u最短路ww咱可以跑dp? 分层图,第一层:原图,第二层内部:原图,然后从第一层点u向第二层点v连一条长度为0的边,从第二层点v再向第一层点u连一条长度为0的边。 因为有可能用不完k个,所以需要从u到u连一条长度为0的边(单向的) BZOJ 4152 The Captain 假设 \(x_1<x_2<x_3\) 那么选择 \(x_3\) 不如选择 \(x_1->x_2\) ,再选择 \(x_2\) 到 \(x_3\) 按x轴排序,相邻的点建边,然后就是O(n); 按照某维坐标排序,相邻两个点在这一维度上的差值最小,所以两两连边,长度为这一维度上的差值(不用考虑另外一维度的,就算另外一维度的更小,在连另外一维度的时候也能够抵达)。然后跑最短路即可。 BZOJ 1050 旅行 COMF 枚举最小边,然后大概就是跑最小生成树的思路,然后找最大边 枚举最小边,用更大的边做 Kruskal,当 S 和 T 连通立即 Break。 LCT,从大到小加边维护最小生成树。 1.边按权值排序,标号1~m 2.初始化一个枚举起点sta=1 3

图论小专题C

浪尽此生 提交于 2019-11-27 02:53:47
3 负环及其应用 3.1 判定算法 判断负环只能用“边松弛”算法,也就是Bellman-Ford和SPFA算法。这两个算法都是 \(O(NM)\) 级别的。因为负环中一定存在一条负边,使得 \(dis_i > dis_j+d(i,j)\) 恒成立。因此,在用边松弛算法时,如果一条边被松弛超过一定次数,我们就可以判定图中存在负环。负环则代表环上的边权和小于0。在负环上走若干圈,则 \(dis_i\) 可以趋近 \(-\infty\) 。 Bellman-Ford算法 如果经过 \(n\) 轮迭代后,仍然有边可以被更新,则图中存在负环。 否则,如果在 \(n-1\) 轮迭代后,如果不能更新任何一条边,则图中不存在负环。 SPFA算法 设 \(|\Gamma_i|\) 表示从源点到 \(i\) 的最短路包含的边数。规定 \(|\Gamma_S|=0\) 。当转移 \(dis_y = dis_x + d(x,y)\) 成立时,我们同时令 \(|\Gamma_y| = |\Gamma_x| + 1\) 。在任意时刻,如果有 \(|\Gamma_y| \geq n\) ,则图中有负环。 我们也可以用入队次数来判断。如果一个节点被入队 \(n\) 次以上,则图中存在负环。 当然, 前面 也介绍过一种基于DFS的SPFA判断负环的方法。这种方法速度较快,但是比较专一。在计算最短路时

DP&图论 DAY 6 上午

限于喜欢 提交于 2019-11-27 02:08:46
DP&图论 DAY 6 上午 双连通分量 从u-->v不存在必经边,点 点双连通分量 边双连通分量 点/边双连通分量缩点之后变成一个树 找连通块的时候不越过割点或者桥 P3469 [POI2008]BLO-Blockade 1.不删割点,减少 2(n-1) 2.删割点,图分裂多个联通快,连通块大小*其他所有连通块大小 缩点之后得到一个树 P2860 [USACO06JAN]冗余路径Redundant Paths 缩点之后变成树,加多少边 二分图 无向图 二分图:点黑白染色,邻点不同色。 > 二分图的等价条件 二分图匹配 分成两列,左右相连 匈牙利算法 匹配边比非匹配边少1,然后交换,匹配边多1 dfs 一个点的匹配边只有一个 网络流 最小顶点覆盖 Knoig 定理 一个点,可以选中所有临边 国际棋盘是黑白染色的 POJ 3041 Asteroids Solution 坐标图建图 x 坐标一列, y 坐标一列,然后对于一个坐标,x 坐标向 y 坐标连边 最小覆盖=最大匹配 最小路径覆盖 原图中的路径和二分图中的匹配数是一一对应的 要使得每个点唯一入度唯一出度,才能保证匹配 一个选中的边确定了一个出点得到匹配 没有入边的点只能放飞自我等待匹配 BZOJ 2150 部落战争 Solution 差分约束 BZOJ 2330 糖果 Solution 1.建边 X=1 A >= B&&A <=

图论1:最短路相关

萝らか妹 提交于 2019-11-27 02:06:18
文章目录 最短路 bfs求0/1最短路:电路维修 分治最短路:[Zjoi2016]旅行者 分块floyd:Problem M. Walking Plan floyd的本质:最优路线 test2018-2-28旅途 noip2017d1t3逛公园 floyd传递闭包+bitset优化 墨墨的等式 小凯的疑惑 差分约束 bzoj2788: [Poi2012]Festival 最短路 bfs求0/1最短路:电路维修 luoguP2243 电路维修 权值仅0,1,即可O(1)维护单调队列做dijkstra。用双端队列实现。 // luogu-judger-enable-o2 //Achen # include <bits/stdc++.h> # define For(i,a,b) for(int i=(a);i<=(b);i++) # define Rep(i,a,b) for(int i=(a);i>=(b);i--) # define Formylove return 0 const int N = 507 ; typedef long long LL ; typedef double db ; using namespace std ; int T , n , m , d [ N ] [ N ] , tx [ 5 ] = { - 1 , - 1 , 1 , 1 } , ty [ 5

DP&图论 DAY 6 下午 考试

懵懂的女人 提交于 2019-11-27 00:45:17
DP&图论 DAY 6 下午 考试 3 5 10 3 1 3 437 1 2 282 1 5 328 1 2 519 1 2 990 2 3 837 2 4 267 2 3 502 3 5 613 4 5 132 1 3 4 10 13 4 1 6 484 1 3 342 2 3 695 2 3 791 2 8 974 3 9 526 4 9 584 4 7 550 5 9 914 6 7 444 6 8 779 6 10 350 8 8 394 9 10 3 7 10 9 4 1 2 330 1 3 374 1 6 194 2 4 395 2 5 970 2 10 117 3 8 209 4 9 253 5 7 864 8 5 10 6 样例输入 437 526 641 样例输出 题解 >50 pt dij 跑暴力 (Floyd太慢了QWQ O(n^3)) 枚举每个点作为起点,dijkstra,跑暴力 O( (n+m)logn ),寻找全局最短路 #include<iostream> #include<cstdio> #include<string> #include<cstring> #include<cmath> #include<cstdlib> #include<algorithm> #include<queue> using namespace std; inline

图论基础知识

99封情书 提交于 2019-11-27 00:18:52
没有用的话qaq : Ummmm...图论的大部分知识本来早就有学过,只是一直没有写成博文来梳理,但既然上了qbxt DP图论就写一篇来总结下 , 主要是来听DP的,但...由于太菜的原因,DP听得天花乱坠QWQ ** 一,图:图是边和点组成的几何体 G=< V , E > V是点集合,E是边集 形如这样的东西就是一个图 二,图的相关基本概念 1,边:图上连接点和点之间的东西叫做边,图上边分为有向边和无向边。有向边是有方向的边,无向边是没有方向的边,在图上具体体现为有无箭头。 2,点:图上的点 3,权:就是某个东西的大小,图中一般会存在点权和边权,就是给点赋一个值和给边赋一个值,没有权的情况称为无权,权值为负的时候称为负权(注意以后算法中的负权边) 4,环:无向边中的环就像上图中的1,2,5和2,3,4,5,环的特点是,环上任意一点能到达通过环能回到自己!!有向图的环相同,就是一个点如果能通过一条路径回到自己,我们就说这条路径是一个环,负环的定义为环上所有边权之和小于零。 5,重边:即两个点之间有重复的边,但注意两个点之间重复但方向不同的边不属于重边。 6,有向无环图(DAG):字面意思,是有向图且没有环的图称为有向无环图,简称DAG,一般与有向图缩点后拓扑排序后,DAG上的DP有关,同时DP的实质是个DAG。 7,路径:从一条边到另一条边的路称为路径,简单路径是一条没有环的路径。

图论 —— 弦图

别说谁变了你拦得住时间么 提交于 2019-11-26 23:22:32
【概述】 1.基本概念 设有图 G=(V,E),则: 当 V'∈V,E'∈E 时,图 G'=(V',E') 是图 G 的 子图 当 V'∈V,E'={∀x∈V',∀y∈V',(x,y)∈E'} 时,G'(V',E') 是图 G 的 诱导子图 当 G′ 是图 G 的子图,且 G′ 是关于 V′ 的完全图时,子图 G' 为图 G 的 团 当 G' 是团,且不是其他团的子集时,G' 为图 G 的 极大团 当 G' 是极大团时,且点数最多,G' 为图 G 最大团 ,记图 G 的最大团的点数为 w(G) 用最少的颜色个数给点染色且相邻点颜色不同,最少的颜色个数称 最小染色 ,记色数为 λ(G) 当 G′ 中所有点不相邻,最大点集最大的图 G′ 为图 G 的 最大独立集 ,记作 α(G) 当用个数最少的团覆盖图 G 所有的点时,称为 最小团覆盖 ,记作 χ(G) 最大团中颜色必须不同,则有:最大团点数 w(G)<=最小染色数 λ(G) 每个团中最多取一个点,则有:最大独立集 α(G)<=最小团覆盖 χ(G) 2.弦图 将一个环中,不相邻的两个结点相连的边称为 弦 当一张无向图中,任意一个大小超过 3 的环,都存在至少一条弦,那么这张无向图称为 弦图 ,弦图的每一诱导子图一定是弦图,且弦图的任一诱导子图不同构于 环图 Cn(n>3) 【弦图的判定】 设 N(v) 为点 v 相邻的点集,当 {v}

又是图论.jpg

…衆ロ難τιáo~ 提交于 2019-11-26 23:06:43
BZOJ 2200 道路和航线重讲ww: FJ 正在一个新的销售区域对他的牛奶销售方案进行调查。他想把牛奶送到 T 个城镇 (1 ≤ T ≤ 25000),编号为 1 到 T。这些城镇之间通过 R 条道路 (1 ≤ R ≤ 50000) 和 P 条航线(1 ≤ P ≤ 50000) 连接。每条道路 i 或者航线 i 连接城镇 Ai 到Bi,花费为 Ci。对于道路, 0 ≤ Ci ≤ 10000; 然而航线的花费很神奇,花费 Ci 可能是负数 (-10000 ≤ Ci ≤ 10000)。道路是双向的,可以从 Ai 到 Bi,也可以从 Bi 到 Ai,花费都是 Ci。然而航线与之不同,只可以从 Ai 到 Bi。事实上,由于最近恐怖主义太嚣张,为了社会和谐,出台了一些政策保证: 如果有一条航线可以从 Ai 到 Bi,那么保证不可能通过一些道路和航线从 Bi 回到Ai。 (有向边不存在于任何一个环,环都是正权无向边)由于 FJ 的奶牛世界公认〸分给力,他需要运送奶牛到每一个城镇。他想找到从发送中心城镇 S 把奶牛送到每个城镇的最便宜的方案,或者知道这是不可能的。 (求从s出发到某个点的单源最短路);O(nlogn) 把所有无向边加进去,形成若干连通块,看成一个大的点,然后加入有向边,形成一个DAG,如果有连通块的入度为0,直接连通块内跑dijkstar:以已更新的dis为基础ww

图论之点双&边双

回眸只為那壹抹淺笑 提交于 2019-11-26 22:43:48
说人话: 边双联通: a到b的路径上无必经边 点双联通: a到b的路径上除了a,b没有必经点 tarjan求点双联通: 代码(补图) 割点: 桥: 求点双:强制dfs时不越过割点,即可求出一个块 求边双:dfs时不越过桥 不是割点:减少2n-1 是割点:减少sigmai的大小*其他所有子树的大小 tarjan求桥,然后缩点,会形成一棵树。把树的所有叶子连起来用的边数就是答案 判断: 当且仅当无向图上不含奇环的时候就是二分图 增广路特点:非匹配边比匹配边多一条 寻找增广路:dfs 咕咕咕~ 网络流: 最小割最大流定理:网络流的最大流就是整个图的最小割 dinic:类似匈牙利算法的思路,不断寻找当前最大流能加1的方案 直到不能再加 先dfs一遍,确定每个点到源点s的距离, 同时不断加边,维护当前流量 毒瘤操作:减少某条边的流量 所以就减反向边,边权为0,表示从终点到起点可扩充流量 二分图最大匹配怎么用网络流搞? 在左边建一个超级源点s,在右边建一个超级汇点t s向每个左边的点建一个流量为1的边,右边的点向t建流量为1的边 二分图中间的点不停的寻找能加流量的路,能加就加,知道不能加 总之最大流就是最大匹配 二分图建图小技巧: 如果有x轴,y轴,且有一个坐标(x0,y0) 则就由x0向y0建一条边 国际象棋棋盘:黑白染色(黑的向白的建边) 就是最小覆盖qwq