![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
图论
网络流 费用流 最短路 最小生成树 并查集 拓扑排序 欧拉回路
Xiao____Q
退役ACMer
展开
-
POJ - 3169 -- Layout
题目来源:http://poj.org/problem?id=3169思路来自:https://blog.csdn.net/mengxiang000000/article/details/52613328差分约束系统题目。题目要求即是求出an-a1的最大值。如果只考虑ml的情况,则可以推出:a1-a2<=k1; -- 1a2-a3<=k2; -- 2a1...原创 2018-08-22 20:53:02 · 92 阅读 · 0 评论 -
CodeForces 813C The Door Problem
题目来源:http://codeforces.com/problemset/problem/776/D思路来自:https://blog.csdn.net/black_miracle/article/details/57083033对每个开关i,有两种状态,即开或不开。可以用i表示开,i+m表示不开。对于每个门,与门相连的两个开关为a和b,若门的状态为1,则(a,b) (a+m,b+m...原创 2018-07-28 20:16:59 · 171 阅读 · 0 评论 -
POJ 1182 - 食物链
题目来源:http://poj.org/problem?id=1182并查集经典题目。思路来自:https://blog.csdn.net/niushuai666/article/details/6981689代码:#include <bits/stdc++.h>using namespace std;const int maxn=5e4+10;int n,k,d,...原创 2018-07-28 15:53:36 · 123 阅读 · 0 评论 -
【模板】最近公共祖先(LCA)
来源:https://www.luogu.org/problem/show?pid=3379#sub洛谷P3379数据范围很大,存储树的方法:head[i]表示节点i的头指针,指向与其相连的一条边。e[i]用来存储边的信息,to表示其指向的节点,next表示u节点的上一条边的编号。倍增思想。代码#include #include #i原创 2016-10-18 23:31:49 · 271 阅读 · 0 评论 -
NOIP2013货车运输
题目来源https://www.luogu.org/problem/show?pid=196760分Kruskal+SPFA先用Kruskal构造出最大生成树,再在树上跑SPFA,过掉60%的数据。#include #include #include #include #include #include #include #includ原创 2016-10-06 18:02:38 · 505 阅读 · 1 评论 -
HDU - 5691 -- 传递 O(n^2)做法
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=5961个人认为,这道题的时间限制应该改为1000ms,6000ms导致大量O( n^3 )的暴力代码就这样水过去了。思路:首先考虑,如果一个竞赛图存在环,那么它一定不满足传递性。对于P是这样,对于Q也是这样。如果存在一个环,其一部分有P中的边组成,另一部分由Q组成。若P满足传递性,则存在...原创 2018-08-23 22:33:57 · 151 阅读 · 0 评论 -
POJ1094 Sorting It All Out
题目来源:http://poj.org/problem?id=1094Sorting It All OutTime Limit: 1000MS Memory Limit: 10000KTotal Submissions: 35447 Accepted: 12444DescriptionAn ascendin原创 2017-08-07 22:31:37 · 193 阅读 · 0 评论 -
NOIP2003 神经网络
题目来源https://www.luogu.org/problem/show?pid=1038拓扑排序。对入度为0的点操作,若该点的状态值若状态值>0,则先对其指向的节点处理,更新其状态值,再删除出边分层处理。将产生的新的入度为0的节点放入队列中#include #include #include #include #include #in原创 2016-10-06 17:22:16 · 306 阅读 · 0 评论 -
POJ1789 Truck History
题目来源:http://poj.org/problem?id=1789Truck HistoryTime Limit: 2000MS Memory Limit: 65536KTotal Submissions: 28946 Accepted: 11301DescriptionAdvanced Cargo M原创 2017-08-07 22:17:24 · 182 阅读 · 0 评论 -
POJ3026 Borg Maze
题目来源:http://poj.org/problem?id=3026Borg MazeTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 14890 Accepted: 4825DescriptionThe Borg is an im原创 2017-08-07 21:59:33 · 224 阅读 · 0 评论 -
洛谷 P1194 买礼物
题目来源https://www.luogu.org/problem/show?pid=1194先设立一个虚构的点,该点与所有点均有边相连,且边权值为A,即商品的价格。这样保证至少先买一件商品,再优惠。存储每一条边,用Kruskal算法计算最小生成树的所有边权总和。#include #include #include #include #inc原创 2016-10-06 17:41:40 · 489 阅读 · 0 评论 -
洛谷 P1341无序字母对
题目来源:https://www.luogu.org/problem/show?pid=1341审题之后,我们可以看出题目即是让找出一条路径,经过每条路一次且仅一次,即找一条欧拉路径,并保证该路径的字典序最小。首先,是否存在欧拉路的条件:1) 该连通图的所有节点的度均为偶数。2)该连通图的奇点仅有两个。存在一条欧拉路从其中一个奇点出发,从另一个奇点结原创 2016-10-20 20:08:03 · 462 阅读 · 0 评论 -
POJ - 3255 -- Roadblocks
题目来源:http://poj.org/problem?id=3255次短路模板题。Dijkstra算法实现。代码:#include <cstdio>#include <iostream>#include <queue>#include <cstring>#include <cstdlib>#include <...原创 2018-08-18 15:34:02 · 178 阅读 · 0 评论 -
UVA 11374 Airport Express(Dijkstra 最短路)
跑两次Dijkstra算法。第二次以终点为起点,这样枚举每一条可换权值的边,即可找出最小值。Dijkstra用的O(nlogn)的堆优化的算法。另外,在输出时应注意格式,如果该组数据不是最后一组就不能在行末换行,否则会PE。代码:#include #include #include #include #include #include using namespace原创 2017-11-02 20:46:29 · 700 阅读 · 0 评论 -
POJ3259 Wormholes 洛谷P3385 【模板】负环
题目来源:http://poj.org/problem?id=3259 https://www.luogu.org/problem/show?pid=3385这两个题本质均是判断给定图中是否存在负环。先来看POJ上的题。使用SPFA算法,记录运行过程中某点进队列的次数,如果超过n次则一定存在负环。代码1:#include #include #i原创 2017-08-04 13:20:59 · 279 阅读 · 0 评论 -
HDU3790 最短路径问题
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=3790最短路径问题Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 26741 Accepted Submissio原创 2017-06-30 12:06:03 · 196 阅读 · 0 评论 -
HDU1595 find the longest of the shortest
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=1595find the longest of the shortestTime Limit: 1000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3原创 2017-06-30 11:58:09 · 179 阅读 · 0 评论 -
NOIP2009 最优贸易
题目来源:https://www.luogu.org/problem/show?pid=1073存两次图,一次正存,一次倒存。跑两次SPFA,对于每个点,找到从1开始到该点所经过的路径上权值的最小值dis1[i]以及从n开始到该点(倒存)所经过的路径上权值的最大值dis2[i]。枚举每个点,找到max(dis2[i]-dis1[i]),即为所求的值。原创 2016-11-04 13:47:43 · 409 阅读 · 0 评论 -
洛谷 P1462 通往奥格瑞玛的道路
题目来源:https://www.luogu.org/problem/show?pid=1462二分答案+SPFA。对其要花的费用二分,每次验证是否正确时跑一遍SPFA,只取费用代码:#include #include #include #include #include #include #include #include #inc原创 2016-10-20 19:52:36 · 424 阅读 · 0 评论 -
Gym - 101666E -- Easter Eggs
题目来源:http://codeforces.com/gym/101666/attachments由于是求最小距离的最大值,因此很容易想到二分答案。在验证每一个值的过程中,我们可以将距离<mid的边保留,>mid的边删除,因此变成了求二分图的最大独立集的问题。相关概念及定理:https://blog.csdn.net/moon_sky1999/article/details...原创 2018-08-09 22:37:08 · 275 阅读 · 0 评论 -
Gym - 101485E Elementary Math
题目来源:http://codeforces.com/gym/101485/attachments二分图匹配+离散化。WA了好多发:1.‘+’、‘*’运算得到的结果可能相同,不要忘了加else。2.数据会爆int,一定要用long long 匈牙利算法进行二分图匹配。代码:#include <bits/stdc++.h>using namespace...原创 2018-08-07 22:32:26 · 184 阅读 · 0 评论 -
POJ - 3041 - Asteroids
题目来源:http://poj.org/problem?id=3041匹配的相关概念及定理见:https://blog.csdn.net/moon_sky1999/article/details/81331795可以等价为二分图中求最小顶点覆盖,由相关定理可得,最小顶点覆盖等于最大匹配,因此只需用匈牙利算法求出最大匹配即可。代码:#include <iostream>...原创 2018-08-01 16:09:06 · 93 阅读 · 0 评论 -
匹配的相关概念
记图G=(V,E)。1.匹配:(边集)在G中两两没有公共端点的边集合ME。2.边覆盖:G中的任意顶点都至少是F中某条边的端点的边集合FE。3.独立集:(点集)在G中两两互不相连的顶点集合SV。4.顶点覆盖:G中的任意边都有至少一个端点属于S的顶点集合SV。 a.对于不存在孤立点的图,|最大匹配|+|最小边覆盖|=|V|。b.|最大独立集|+|最小顶点覆盖|=|V|...原创 2018-08-01 15:37:18 · 521 阅读 · 0 评论 -
2018第九届山东省ACM——B Bullet
题目来源:https://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Index/problemdetail/pid/4215.htmlBulletTime Limit:1000 msMemory Limit:65536 KiBSubmitStatisticDiscussProblem DescriptionIn GGO, ...原创 2018-07-18 22:24:57 · 313 阅读 · 0 评论 -
HDU 2063 (二分图最大匹配)
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=2063基础二分图匹配入门题,算法详解见http://blog.csdn.net/liwen_7/article/details/7797652代码:#include #include #include #include #include using namespace std;c原创 2017-11-22 09:13:08 · 201 阅读 · 0 评论 -
洛谷P1330 封锁阳光大学
题目来源https://www.luogu.org/problem/show?pid=1330二分图。染色判断是否可行。每个连通块内取节点较少的颜色的节点封锁。若出现冲突,直接输出"Impossible"#include #include #include #include #include #include #include #include原创 2016-10-06 17:33:58 · 365 阅读 · 0 评论 -
NOIP2010关押罪犯
题目来源https://www.luogu.org/problem/show?pid=1525二分答案,再对此图进行二分图染色,只取长度>mid的边进行处理保证长度>mid的边相邻的两个节点染上不同颜色color数组表示颜色,0表示未染色#include #include #include #include #include #includ原创 2016-10-06 17:14:20 · 419 阅读 · 0 评论 -
POJ - 3057 -- Evacuation
题目来源:http://poj.org/problem?id=3057由于题目是让求所需花费的最小时间,因此可以采用二分答案的方法,验证答案是否可行。可以采用最大流来验证是否存在方案。建图方法:假设有一个源点S,与图中所有的“.”相连,流量为1,图中所有的“.”与其所能到达的"D"相连,流量为1。图中所有的“D”与假设的汇点T相连,流量为二分的值mid,跑从S到T的最大流,如果最大...原创 2018-08-03 16:40:18 · 237 阅读 · 0 评论 -
Gym 101128F -- Landscaping
题目来源:http://codeforces.com/gym/101128/attachments思路来自:https://blog.csdn.net/rain722/article/details/68928211Ford-Fulkerson算法计算最大流。所有低点与大汇点相连,左右高点与大源点相连,流量为B,在任意相邻两点之间连一条流量为A的边。建图之后跑图的最小割即为所求。代...原创 2018-08-02 20:32:21 · 207 阅读 · 2 评论 -
POJ - 3469 -- Dual Core CPU
题目来源:http://poj.org/problem?id=3469由于maxm开小了,RE了好多发。另外,G++交的TLE了,用C++过的。最小割问题,由定理知,最小割=最大流,因此可用最大流Dinic算法解决。代码:#include <iostream>#include <cstring>#include <cstdio>#incl...原创 2018-08-02 10:13:10 · 152 阅读 · 0 评论 -
HDU - 3549 - Flow Problem (最大流模板题--Dinic算法实现)
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=3549代码:#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>#include <cmath>#include <que...原创 2018-08-01 21:56:58 · 239 阅读 · 0 评论 -
POJ - 3281 -- Dining
题目来源:http://poj.org/problem?id=3281网络流建图,最大流问题。边的方向为:s->食物->牛->牛->饮料->t。将牛拆成两个顶点,之间连一条容量为1的边,这样避免了一头牛杯分配多组食物和饮料的方案,计算出图中的最大流即可。代码:#include <iostream>#include <cstri...原创 2018-08-01 20:43:12 · 134 阅读 · 0 评论 -
HDU - 3549 - Flow Problem (最大流模板题--Ford-Fulkerson算法实现)
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=3549代码:#include <bits/stdc++.h>#define ll long longusing namespace std;struct edge{ int to,next,cap,rev;}e[10010];bool vis[1010];int...原创 2018-08-01 19:47:45 · 123 阅读 · 0 评论 -
POJ - 1236 -- Network of Schools
题目来源:http://poj.org/problem?id=1236最开始做的时候理解错题意了QWQ,WA了几发。题目大意:给定一个有向图,第一问是选择部分的节点,以这些节点为起点可以遍历整个图,最少要选几个节点。第二问是问添加最少多少条边,使得以任意节点为起点,均可以遍历整个图。思路:先用tarjan求出整个图的所有强连通分量,对每个连通分量进行缩点,处理出缩点后的图。...原创 2018-08-09 16:52:42 · 88 阅读 · 0 评论 -
POJ - 2186 -- Popular Cows
题目来源:http://poj.org/problem?id=2186思路:先处理出所有的强连通分量,将所有的强连通分量染色,缩点,这样原图变成了一棵有向树。如果出度为0的节点有且仅有一个,则这个节点所对应的强连通分量就是所有满足题意的节点。代码:#include <cstdio>#include <cstring>#include <algorit...原创 2018-08-09 10:38:40 · 102 阅读 · 0 评论 -
Gym - 100712H - Bridges
题目来源:http://codeforces.com/gym/100712/attachments先用tarjan找出所有桥,计数。tarjan得到的树另存,如果边是桥,那么边权为1,否则为0。跑两次dfs得到树的直径(权值最大),用桥的总数-直径的值,即为结果。代码:#include <bits/stdc++.h>using namespace std;in...原创 2018-07-22 21:30:54 · 154 阅读 · 0 评论 -
HDU1269 迷宫城堡
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=1269强连通分量裸题。用Tarjan求出图中的强连通分量,判断其大小是否为n即可。代码:#include <bits/stdc++.h>using namespace std;int n,m;const int maxn=10010;int cur=0;vector&...原创 2018-07-20 13:26:58 · 159 阅读 · 0 评论 -
UVA 247 Calling Circles
点双连通分量裸题。每找到一个双连通分量,就将其输出。要注意对字符串的处理,将其转化为图中的节点。代码:#include using namespace std;map l;map h;int n,m;int tot=0;bool g[101][101];int dfn[101];int low[101];bool vis[101];int top=0;int cn原创 2017-12-12 21:07:06 · 173 阅读 · 0 评论 -
UVA 610 Street Directions
题目大意:问最多可以将图中多少条边改造为有向边,使得任意两点间仍可互相到达。除割边(桥)以外,任何边均可以改造成有向边。可在Tarjan的过程中记录方案。如果找到一个边双连通分量,即可将该分量中的边按有向边存储,找到桥之后将其双向存储。代码:#include using namespace std;const int maxn=1e4;int n,m;struc原创 2017-12-12 20:57:37 · 218 阅读 · 0 评论 -
POJ 3352 Road Construction
题目来源:http://poj.org/problem?id=3352题目大意:给定一个无向图,问添加几条边可以让其变为边双连通的。也就是问图中边双连通分量的个数。可以原创 2017-12-12 20:35:11 · 204 阅读 · 0 评论