图论
__default__
一个学生。
展开
-
LeetCode-684/685 冗余连接
题目描述: 在本问题中, 树指的是一个连通且无环的无向图。 输入一个图,该图由一个有着N个节点 (节点值不重复1, 2, …, N) 的树及一条附加的边构成。附加的边的两个顶点包含在1到N中间,这条附加的边不属于树中已存在的边。 结果图是一个以边组成的二维数组。每一个边的元素是一对[u, v] ,满足 u < v,表示连接顶点u 和v的无向图的边。 返回一条可以删去...原创 2018-07-24 15:21:04 · 1381 阅读 · 0 评论 -
Dining POJ - 3281 最大流
题目链接:http://poj.org/problem?id=3281 题意: 农场有很多牛,不同的牛有着多种不同的食物和饮料偏好,每顿饭吃一种食物和饮料,每种饮料和食物只能被一头牛吃,问最多能使多少牛即吃到喜欢食物又喝到喜欢的饮料。 分析: 将牛拆分为2个点,一个跟食物连边,另一个跟饮料连边,然后对应的牛之间进行连边。最后虚拟出一个源点和汇点,计算从源点到汇点的最大流即可。...原创 2018-08-10 15:45:03 · 764 阅读 · 0 评论 -
Drainage Ditches POJ - 1273 裸最大流
题目链接:http://poj.org/problem?id=1273 题意: 就是排水问题,裸裸的最大流。 代码: #include <cstring> #include <iostream> #include <cstdio> #include <vector> #define INF (1 &lt原创 2018-08-10 16:33:10 · 736 阅读 · 0 评论 -
畅通工程再续 HDU - 1875
#include <bits/stdc++.h> #define N 105 #define INF 1e10 #define fp(_p,_q,_r) for(int _p = _q;_p < _r;_p ++) using namespace std; int ro,n,co[N][2]; double cost[N][N]; double d[N]; bool used[N...原创 2018-08-02 10:52:12 · 864 阅读 · 0 评论 -
Fire Net HDU - 1045 二分图最大匹配模板+缩点
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1045 题意: 在一个用网格表示的城市中有若干个墙,还有可以向四方扫射的机枪,机枪的子弹可以可以打穿机枪,但不能打穿墙,给出城市的地图,计算可放置机枪的最大数目。 思路: 很容易想到的是使用搜索,穷举即可。但是这道题也可以巧妙的使用二分图匹配来做。分别按照横向和纵向将每行每列的连续空...原创 2018-08-15 19:44:59 · 440 阅读 · 0 评论 -
The Accomodation of Students HDU - 2444 二分图判定 + 二分图最大匹配
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=2444 题意: 有一组学生(点),他们之间有相互认识的关系(边),问能否分成两组使得组内没有相识的人,不能的话输出“No”,注意不是“NO”,因为这个wa了半天=_=,如果能的话则对他们安排住宿,使得两个相互认识的人住在一个双人间里,问需要多少个双人间。 分析: 分组就是二分图判定,...原创 2018-08-16 09:29:36 · 426 阅读 · 0 评论 -
Friend-Graph HDU - 6152 图论 拉姆齐定律 最大团
题意: 在一个团队中如果有三个或更多人之间互相认识或互相不认识,那么这个团队就被称为”Bad Team”,否则被称为”Great Team”。给定一个团队的信息,然你判定这个团队是哪一种。 分析: 问题可以抽象为在一个点数为NNN的无向图中是否存在一个完全图KnKnK_n(KnKnK_n代表定点数为nnn的完全图。),3≤n≤N3≤n≤N3 \le n \le N,又由于Kn,...原创 2018-08-23 15:20:25 · 342 阅读 · 0 评论 -
POJ 3255 次短路径
#include <bits/stdc++.h> #define N 105 #define INF 1e10 #define fp(_p,_q,_r) for(int _p = _q;_p < _r;_p ++) using namespace std; int ro,n,co[N][2]; double cost[N][N]; double d[N]; bool used[N...原创 2018-08-21 15:37:17 · 122 阅读 · 0 评论 -
Computer HDU - 2196 树的直径
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=2196 题意: 在一个树中,求各个点到其他点的最远距离。 思路: 我们可以使用搜索求出一个点到其他点的最远距离,因此很容易想到对每个点进行一次搜索,但这个复杂度就比较高了,会超时。树上直径有一个性质:假设aaa和bbb是树上直径的两端点,那么对于其他任一点iii到其他点的最远距离...原创 2018-08-21 17:47:42 · 157 阅读 · 0 评论 -
Roadblocks POJ - 3255 次短路径
题目链接:http://poj.org/problem?id=3255 题意: 主人公想要找到一条道目的地的次短路径,问次短路径的长度为多少。这题裸次短路,直接套模板即可。 #include <bits/stdc++.h> #define N 105 #define INF 1e10 #define fp(_p,_q,_r) for(int _p = _q;_p <...原创 2018-08-10 14:51:26 · 829 阅读 · 0 评论 -
Truck History POJ - 1789 最小生成树
题意: 给定若干个定长字符串,规定两个字符串之间的距离为两个字符串对应位置不同自付的个数。然后求从一个字符串最少经过多少距离可以变异成这个字符串集。 思路: 构建一副图求最小生成树的权重即可。注意一点,这里使用 string 会TLE。 #include <cstring> #include <iostream> #include <cstdi...原创 2018-07-31 21:23:23 · 843 阅读 · 0 评论 -
二分图判定
二分图判定是指给定一个具有 n 个顶点的图,要给图上每个顶点染色,并且要使相邻的顶点颜色不同。问是否能用最多 2 种颜色进行染色?保证图中没有重边和自环。 把相邻顶点染成不同颜色的问题叫做图的着色问题。对图进行染色所需要的最小颜色数称为最小着色数。最小着色数是 2 的图称作二分图。 例如: 上图显然不是一个二分图,因为三个顶点两两相连,至少需要三种不同颜色; 而这个图显然是一个二...原创 2018-07-20 22:33:10 · 1496 阅读 · 0 评论 -
最短路问题模板——迪杰斯特拉算法(Dijstra)、Bellman-Ford算法、弗洛伊德算法(Floyd-Warshall)、SPFA算法
Dijstra算法: //POJ 2378 #include &amp;amp;amp;lt;bits/stdc++.h&amp;amp;amp;gt; using namespace std; #define MAXN 1005 const int INF = (1 &amp;amp;amp;lt;&amp;amp;amp;lt; 30); int t,V,d[MAXN],costs[MAXN][MAXN]; bool used[MAXN]原创 2018-07-30 19:44:15 · 1325 阅读 · 0 评论 -
Silver Cow Party POJ - 3268 往返最短路径
题目链接 题意: 在一个有向图中,求所有点到一个目标点 X 的往返路径和的最大值。 思路: 首先很容易想到 Floyd 算法求得任意两点之间的最短路径,然后再算 min(d[i][X] + d[X][i]) (d[i][j] 表示 i 到 j 的最短路径),但是 O(N^3) 的复杂度会超时。 我采用 Dijstra 算法,先计算以目标点 X 为单源点的最短路径,也就是...原创 2018-07-29 22:09:42 · 1015 阅读 · 0 评论 -
Heavy Transportation POJ - 1797 && Frogger POJ - 2253 Dijstra 算法变形
这两道题都对 Dijstra 进行了改造,继承了 Dijstra 的精髓,也就是贪心和松弛。我们先找贪心的从未访问过的点中找到最符合条件的点,因为通过这个点确定的边进行松弛之后有可能改善之前的情况,比如最短路中先找到当前最短的边,然后利用这条边进行松弛,就可能通过这条边找到到其他点的最短路径,然后重复此过程即可。 POJ 1797 题目链接 题意: 在一个图中,每条边都有一定的承载力,...原创 2018-07-30 10:32:23 · 846 阅读 · 0 评论 -
Currency Exchange POJ - 1860 负权环检测变形
题意: 在一个城市中有 n 个货币交换点,每个交换点可以接受两种货币的交换,不同的交换方式有不同的汇率和手续费。问是否存在一种交换方式使得某人在这个交换过程中可以获利。 思路: 这道题不难,本题类似于负权环的检测,经过负权环之后,成本可以不断减少。如果我们在这道题中存在一个环可以使得我们不断获利,那么我们必然可以在整个过程中获利。我们在 Bellman-Ford 算法或者 SP...原创 2018-07-30 23:00:17 · 972 阅读 · 0 评论 -
Invitation Cards POJ - 1511 往返最短路径
题目链接http://poj.org/problem?id=1511 题意: 在一个有向图中,求从源点出发到达所有点,再返回源点的总花费。其实所有点的往返路径的最小值的和。 思路: 普通的往返路径类题目可以直接转置邻接矩阵,但是这道题的点比较多,我们需要采用邻接表的形式存储图。但通过邻接表建立反向图的过程又比较复杂,所以我们直接在输入的时候分别建立两个不同方向的图。然后使用 ...原创 2018-07-31 13:27:41 · 1187 阅读 · 0 评论 -
Jungle Roads POJ - 1251 最小生成树水题
题意: 没什么意思,就是最小生成树,直接贴代码,坑在于输入。 代码: #include &lt;iostream&gt; #include &lt;cstring&gt; #include &lt;cstdio&gt; #include &lt;algorithm&gt; #define E 100 #define N 30 #define fp(_p,_q,_r)原创 2018-07-31 16:52:20 · 820 阅读 · 0 评论 -
Networking POJ - 1287 最小生成树水题 Prim 模板
题意: 这道题其实就是在 N 个点的图中装宽带,要求全部互联。因为有重边,而且数据范围比较小,我们直接使用邻接矩阵存储,使用 Prim 算法就ok。 代码: #include &amp;lt;iostream&amp;gt; #include &amp;lt;cstdio&amp;gt; #define N 55 #define E 2000 #define INF (1&amp;lt;&amp;l原创 2018-07-31 19:33:36 · 897 阅读 · 0 评论 -
Swap HDU - 2819 二分图最大匹配
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=2819 题意: 给定一个01010 1矩阵,是否可以通过行变换或列变换使其主对角线全文111,如果可以输出该变换序列,否则输出−1−1-1。 分析: 如果主对角线全为111,那么这些111的横纵坐标刚好分别使用了1 n1 n1~n,那么对应变换会原来的矩阵中,同样...原创 2018-08-24 17:36:35 · 239 阅读 · 0 评论