![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
【图论】
nyist_xiaod
这个作者很懒,什么都没留下…
展开
-
最短路
Dijkstra。#include #include #define CLR(a,v) memset(a,v,sizeof(a))#define min(a,b) a < b ? a : b#define N 105#define M 10005struct Vertex{ int head;}V[N];struct Edge{ int v,w,next;翻译 2012-07-24 09:01:24 · 640 阅读 · 0 评论 -
POJ 3694 Network(双连通分量缩点 + 路径压缩)
题目链接:Click here~~题意:n 个点 m 条边的无向图,之后有若干次操作,问每次添加一条边后,图上还剩多少个桥边(操作是累积的)。解题思路:先将无向图的 边-双连通分量 缩点,缩点后重新建图,则变为一颗树,树的每条边就可以看做桥边。不妨设每次添加的边为 。1> 如果之前 u,v 在同一个双连通分量里,则显然不会对结果产生影响。2>原创 2013-07-19 09:26:33 · 1258 阅读 · 0 评论 -
图的邻接表实现
以前邻接表都用vector,今天学习了下一种手写的邻接表,学会后也挺方便的。传上来和大家分享~~。#include #include #define CLR(arr,val) memset(arr,val,sizeof(arr))#define Max_n 100005#define Max_e 10005struct Vertex{ int head;翻译 2012-05-11 14:10:37 · 3954 阅读 · 0 评论 -
HDU 4514 湫湫系列故事——设计风景线(树的直径)
题目链接:Click here~~题意:给一个无向图,若有环输出YES,若无环,则是森林,输出 max { 树的直径 }。(树中最长的简单路)解题思路:早早地就搜了几篇文章,还下载了个PPT。研究了半天,终于搞懂后,搜了好多判环和求树的直径的代码,都和我要写的方法不一样。纠结了好久不敢写,后来脑子疼了,打算乱写一通试试,结果随便调了调竟然就过了。(是太不原创 2013-04-02 20:04:17 · 1553 阅读 · 0 评论 -
Tarjan算法求LCA(最近公共祖先)
LCA的离线算法。复杂度为O(n+q)。这个算法充分利用了dfs树的结构。对于每个节点u,关于它的询问(u,v)只有两种。(假设先dfs(u)后dfs(v))1、v在u的子树内。此时LCA(u,v) = u.2、v不在u的子树内。⑴假设v在u的父亲的另一棵子树内。此时LCA(u,v) = father[u].⑵如果不满足条件⑴,则v可能在u的父亲的父亲的另一棵子树内翻译 2012-08-03 19:57:49 · 3577 阅读 · 0 评论 -
Tarjan算法求SCC(有向图强连通分量)
http://www.byvoid.com/blog/scc-tarjan/zh-hans/http://blog.csdn.net/shiqi_614/article/details/7833628dfn[u] 表示在 dfs 中 u 被访问的顺序标号。(时间戳 / time stamp)low[u] 表示 u 在栈中可以追溯到的的最远祖先的 dfn。若 u 的子节点 v翻译 2012-08-06 10:24:19 · 3114 阅读 · 0 评论 -
最小生成树
Prim。#include #include #define CLR(a,v) memset(a,v,sizeof(a))#define min(a,b) a < b ? a : b#define N 105#define M 10005struct Vertex{ int head;}V[N];struct Edge{ int v,w,next;}E[M翻译 2012-07-24 08:34:54 · 713 阅读 · 0 评论 -
POJ 3621 Sightseeing Cows(01分数规划)
题目链接:Click here~~题意:给出一个有向图,找一条环,使得环上的 点权之和/边权之和 最大。解题思路:此题仍是 01分数规划 的应用,和 最优比例生成树 也比较像。令 L = ∑a[i]*x[i] / ∑b[i]*x[i](x[i] = {0,1} 表示是否选取 i 这条边,a[i] 表示 i 这条边始点或末点的点权,b[i] 表示 i 这条原创 2013-07-10 09:22:24 · 732 阅读 · 0 评论 -
HDU 3605 Escape(网络流 + 状压简化 | 二分图多重匹配)
题目链接:Click here~~题意:有 n 个人选择 m 个星球居住,选择情况和星球居住上限有限制,问是否能全部满足要求。解题思路:解法一:开始想到了最裸的建图,果然 TLE 了。由于 n 太大(1e5) m 很小(10),所以我们可以进行状态压缩,将 n 个人等价划分成 1 建边:S -> mask,cap = cnt[mask]原创 2013-09-10 16:36:25 · 1673 阅读 · 0 评论 -
网络流
EK求最大流。复杂度O(n*m*m)。#include #include #include using namespace std;#define N 205#define M 405#define INF 0x7fffffff#define min(a,b) a < b ? a : b#define CLR(a,v) memset(a,v,sizeof(a))st翻译 2012-07-29 16:11:08 · 812 阅读 · 0 评论 -
匈牙利算法(二分图最大匹配)
匈牙利算法。复杂度为O(mn)。对每个点都找以它为起点的增广路,当找到增广路后,匹配数必定加1。#include #include const int N = 105;const int M = 10005;struct Vertex{ int head;}V[N];struct Edge{ int v,next;}E[M];int top,翻译 2012-08-02 18:01:18 · 819 阅读 · 0 评论 -
判断有向图中是否有环
struct T{ int v,next;}E[N*N];struct TT{ int head;}V[N];bool used[N];bool dfs(int u){ if(used[u]) return true; used[u] = true; for(int i=V[u].head;i!=NULL;i=E[i].翻译 2012-07-23 19:02:56 · 1267 阅读 · 0 评论 -
ZOJ 3668 Launching the Spacecraft(差分约束)
题目链接:Click here~~题意:有 n 个石头,每个石头有一些能量,给出 m 个约束条件,条件是某区间 [a,b] 内的总能量在一个范围内。输出总能量最大的方案。解题思路:令 d[i] 表示区间 [0,i] 的总能量,则约束条件即可转变成 d[b] - d[a-1] >= A , d[b] - d[a-1] 还有两个隐含条件是 d[i]原创 2013-07-17 13:06:23 · 970 阅读 · 2 评论 -
HDU 3666 THE MATRIX PROBLEM(差分约束 + spfa 深搜判环)
题目链接:Click here~~题意:给一个 n*m 的矩阵,问是否能够给每行乘以一个数 Xi,给每列除以一个数 Yj(两行两列之间可以不同),使得最后矩阵中所有元素的值在区间 [L,U] 内。解题思路:取对数后很容易就可以转成差分约束的不等式了。但这题用 spfa 队列判环会超时。于是在网上学习了一个新的姿势,就是用类似 spfa 的思想深搜来判环,原创 2013-07-17 09:07:19 · 897 阅读 · 0 评论 -
POJ 3648 Wedding(2-SAT + 输出方案)
题目链接:Click here~~题意:30对夫妇去参加一场婚礼,有一条长桌子,丈夫和妻子不能坐在一侧。然后,有些冲突关系,具有那些冲突关系的人不能同时坐在新娘的对面。输出坐在新娘这侧的人的编号。解题思路:搞了3天多的题。搞不出来的时候想死。刚才发现一个 v 打成了i ,呵呵***。怎么输出方案呢?先对缩点后的图重新建图,这里的图要逆向建原创 2013-04-05 15:57:48 · 1041 阅读 · 0 评论 -
2-SAT
论文题目链接:Click here~~复杂度O(E)。#include #include #include #include #include #include using namespace std;const int N = 16005;const int M = 40005;struct Vertex{ int head;}V[N],VV翻译 2013-04-05 19:33:48 · 776 阅读 · 0 评论 -
HDU 3715 Go Deeper(2-SAT + 二分判定)
题目链接:Click here~~题意:给一个递归函数,问最多递归到第几层。解题思路:2-SAT + 二分,应该很经典。贴一个出来。只有数组 x[ ] 是未知的,而且 x[i] 的取值只有 0 和 1,把它们看做 i 和 i'。对于某一个层数 dep ,若 dep 存在,就要满足 x[ a[i] ] + x[ b[i] ] != c[i](i∈[原创 2013-04-06 12:41:51 · 850 阅读 · 0 评论 -
POJ 1523 SPF(求割点)
题目链接:Click here~~题意:又学了一天。呵呵。解题思路:先不写思路了,到时候来个总结。#include #include #include #include #include using namespace std;const int N = 2e3+5;const int M = 1e4+5;struct Vertex原创 2013-04-10 09:29:36 · 899 阅读 · 0 评论 -
KM算法(二分图最大权匹配)
http://blog.163.com/huangbingliang@yeah/blog/static/94161399201011291044527/复杂度O(n^3)。#include #include #include using namespace std;const int N = 305;const int Inf = 1e9;int top,mat翻译 2013-03-22 13:26:39 · 805 阅读 · 0 评论 -
Tarjan算法求BCC(无向图连通块、割边、割点)
http://www.byvoid.com/zhs/blog/biconnecthttp://blog.csdn.net/shiqi_614/article/details/7833628#include #include #include #include using namespace std;const int N = 2e3+5;const int翻译 2013-04-10 09:45:50 · 3365 阅读 · 0 评论 -
HDU 3018 Ant Trip(连通分量 & 欧拉路)
题目链接:Click here~~题意:无向图中,不算孤立点,问最少几笔才能画完。解题思路:结论:对于每个连通分量,如果存在欧拉回路,那么它需要 1 笔。如果不存在,那么它需要 奇数点/2 笔。#include #include #include #include using namespace std;namespace UFset{原创 2013-07-07 09:49:16 · 924 阅读 · 0 评论 -
HDU 1116 Play on Words(有向图欧拉路)
题目链接:Click here~~题意:给 n 个词语,问是否能够词语接龙。解题思路:先用并查集找连通分量,然后根据结论来吧。#include #include #include #include #include using namespace std;namespace UFset{ const int N = 27;原创 2013-07-07 11:20:36 · 952 阅读 · 0 评论 -
ZOJ 3332 Strange Country II(竞赛图中的哈密顿路)
题目链接:Click here~~题意:n 个点的竞赛图,找出它的哈密顿路(n 解题思路:首先,竞赛图是指每两个点之间都有一条边的有向图(即边数为 n*(n-1)/2 )。然后,对于竞赛图,一定存在哈密顿路。转载一个证明:求竞赛图中的哈密顿路的算法:首先,由数学归纳法可证竞赛图在n>=2时必存在哈密顿路;(1)n=原创 2013-07-07 16:12:52 · 1286 阅读 · 0 评论 -
HDU 1599 find the mincost route(无向图最小环)
题目链接:Click here~~题意:给一个无向图,求出图中的最小环。解题思路:摘别人的博客。floyd求最小环: 抛开Dijkstra算法,进而我们想到用Floyd算法。我们知道,Floyd算法在进行时会不断更新矩阵dist(k)。设dist[k,i,j]表示从结点i到结点j且满足所有中间结点,它们均属于集合{1,2,⋯原创 2013-07-10 12:00:50 · 1044 阅读 · 0 评论 -
POJ 2728 Desert King(最优比例生成树)
题目链接:Click here~~题意:没看,直接搜的别人的建图。解题思路:调了一上午,哎。下面转自大神博客。概念有带权图G, 对于图中每条边e[i], 都有benifit[i](收入)和cost[i](花费), 我们要求的是一棵生成树T, 它使得 ∑(benifit[i]) / ∑(cost[i]), i∈T 最大(或最原创 2013-07-09 11:48:13 · 1476 阅读 · 0 评论 -
HDU 1384 Intervals(差分约束)
题目链接:Click here~~题意:给出 n 个区间,每个区间有个权值 Ci,最终找出一个最少的数字的集合,使得满足每个区间中至少包含 Ci 个数。解题思路:算法介绍如果一个系统由n个变量和m个约束条件组成,其中每个约束条件形如xj-xi观察xj-xi看了 KIDx 大牛的博客,大概懂了。将 [0,n] 中的所原创 2013-07-13 17:33:15 · 2402 阅读 · 0 评论