图论
lsp4231
最求卓越,成功就会在不经意间追上你~
展开
-
hdu 1878
这是一道裸是否存在欧拉回路判断的题;对于无向图的欧拉回路的判断要有这两个条件要把握1,.这个图是连通的。2.这个图中每个顶点的度数都是偶数(如果是有想图就是出度等于入度)。对于连通性的判断大多要用到并查集。下面是我的代码:#include #include #include #include #define maxn 1001using namespac原创 2014-01-15 12:40:20 · 486 阅读 · 0 评论 -
Bellman-Ford模板
Dijkstra算法无法判断含负权边的图的最短路。如果遇到负权,在没有负权回路存在时(负权回路的含义是,回路的权值和为负。)即便有负权的边,也可以采用Bellman-Ford算法正确求出最短路径。主要是做N次松弛,用变量记录入队列的次数和是否入过队列,如果每次都如队列则判定有负环#include #include #include #include #include #includ原创 2017-03-24 14:09:07 · 307 阅读 · 0 评论 -
Floyd(各对顶点之间的最短距离)
我们其实可以求n次Dijkstra,就可以求出各对顶点的最短路了。但是这不是重点,有一个比他更清晰易懂的算法—Floyd假设从i到j的最短路径上要经过若干个顶点,这些中间顶点中最大的顶点编号为k,最小的顶点为t,因此要求算dist[i][j]的最小值,那么只需要求算dist[i][s]+dist[s][j](t#include #include #include #include原创 2017-03-24 11:51:59 · 981 阅读 · 0 评论 -
uva 11374 Dijkstra (单源最短路径)
这一题写了好久,从过年之前就开始写,现在才过,真的是被这道题卡了一年额……这是白书的题,思路不用说了,唉,直接上代码吧……#include #include #include #include #include #include #define maxn 10010#define INF 129using namespace std;struct Edge{int fr原创 2014-02-03 13:51:58 · 523 阅读 · 0 评论 -
HDU 2883 kebab 网络流
有 n 个顾客,老板在单位时间只能考 m 个肉串。si 为顾客到的时间,ni 为顾客点的肉串数量,ti 为顾客要求每个肉串要烤多长时间,ei 为顾客必须要在这个时间之前拿到肉串。由于时间的范围比大,我们可以将区间拆成最小的区间,每个区间看成一个点,每个区间想终点(T)连一条边 ,然后是每个顾客向合法的区间连一条容量大小为INF的边,起始点(S)向每个顾客连一条ni*si的边,最后求最大流,如果原创 2014-03-24 20:18:26 · 395 阅读 · 0 评论 -
hdu 3572 Task Schedule
http://acm.hdu.edu.cn/showproblem.php?pid=3572这个就是要把每天每个任务拆开对待。然后建网络流,直接套模板就过了,一点压力都没有。#include #include #include #include #include #include #define INF 0x7fffffff#define maxn 1005using原创 2014-03-23 10:06:42 · 323 阅读 · 0 评论 -
POJ 1273 最水最水的网络最大流
直接最大流就可以了。没有任何困难,就是要注意数据范围,每组数据之后清零就可以了。#include #include #include #include #include #include #define INF 0x7fffffff#define maxn 205#define maxm 300000using namespace std;int vis[maxn],cur原创 2014-03-22 19:05:44 · 331 阅读 · 0 评论 -
UVA 11354 Bond
这题就是建立有根树有点问题,其他的都是模板就可以了。。。再就是查询,先调整高度到起始点一样,如果不是同祖先就同时往上找,然后就没别的了。。。#include #include #include #include #include #include #include #include #define maxn 50005#define maxm 100005typedef l原创 2014-02-14 14:08:35 · 438 阅读 · 0 评论 -
poj 1273 网络流简单模板
网络最大流入门题目,写个模板以后自己看着玩。。。#include #include #include #include #include #include #define maxn 210using namespace std;struct Edge{ int to,cap,rev;};vectorG[maxn];int level原创 2014-02-24 21:30:48 · 454 阅读 · 0 评论 -
uva 10917
这是我在一以前写的SPFA上加了一个记忆话搜索救过了,直接上代码吧……#include #include #include #include #include #include #define maxn 1005#define INF 129using namespace std;int max(int a,int b){return a>b?a:b;}int M,N,X;原创 2014-02-03 14:50:34 · 405 阅读 · 0 评论 -
SPFA
建立一个队列,初始时队列里只有起始点,再建立一个表格记录起始点到所有点的最短路径(该表格的初始值要赋为极大值,该点到他本身的路径赋为0)。然后执行松弛操作,用队列里有的点作为起始点去刷新到所有点的最短路,如果刷新成功且被刷新点不在队列中则把该点加入到队列最后。重复执行直到队列为空。如果某个点进入队列的次数超过N次则存在负环(SPFA无法处理带负环的图){CSDN:CODE:228856原创 2017-03-24 14:50:26 · 175 阅读 · 0 评论