图论
文章平均质量分 70
mtxxxx
qq 1149169650
邮箱:huangxin0124@tongji.edu.cn
展开
-
hdu 2063(二分匹配)
#include #include #include #include #include using namespace std; const int maxn=1002,INF=1000000000; //最大流模板 struct Edge { int from,to,cap,flow; Edge(int u,int v,int c,int f):from(u),to原创 2016-04-29 19:31:42 · 267 阅读 · 0 评论 -
最大流(dinic) hdu3572
/** 题意:给n个任务,m台机器,每个任务给出开始时间y,结束时间z和完成所需时间x。求能否完成这些任务。 建图:从一个源点s向每个任务连一条边,容量为完成所需时间,表示每个任务需要花费时间。 从每个任务向从y到z的每一天连一条边,容量为1,表示该任务可以在哪些天完成。 从每天向汇点连一条边,容量为m,表示每天最多运行m个任务。 **/ #include #include #include原创 2017-02-26 11:16:01 · 270 阅读 · 0 评论 -
差分约束系统 Dijkstra模板(2)
/** 差分约束 Dijkstra 模板(数组) 这题用vector会超时,后来才知道这个叫链式前向星 差分约束感觉这个博客写的比较好:http://blog.csdn.net/xuezhongfenfei/article/details/8685313 **/ #include #include #include #include #include #include using n原创 2017-02-21 09:52:01 · 360 阅读 · 0 评论 -
最大流 hdu 4183
/** hdu 4183 求两点之间来回不重复的两条路就是要求从起点到终点至少有两条不重复的路径,最大流大于等于2即可 **/ #include #include #include #include #include using namespace std; struct edge{int to,cap,rev;}; const int INF=10000000000,max_v=1原创 2017-02-28 19:14:00 · 272 阅读 · 0 评论 -
Dijkstra 路径统计 uva10917
/** Dijkstra 算法模板 Dijkstra用法二:路径统计 可以枚举两点之间所有最短路,以及统计最短路的条数。首先,求出所有点到目标点的最短长度d[i], 然后从起点开始,只沿着d[i]=d[j]+dist[i][j]的边走。 统计路径:设f[i]表示从i点到目标点最短路的条数,则f[i]=sum{f[j]|d[i]=d[j]+dist[i][j]}.边界条件 为终点的f值为1. 这原创 2017-02-17 14:42:36 · 431 阅读 · 0 评论 -
Dijkstra 单源最短路 模板 uva11374
/** Dijkstra 算法模板 Dijkstra用法一:做预处理,可以计算从起点出发到每个点的最短路,即单源最短路 这道题还要注意的一个地方是,题目给了几条边是无向边的时候,如果分类讨论从哪条无向边走, 要考虑两个端点做起点,也是这个题我wa的地方。 **/ #include #include #include #include #include #include using原创 2017-02-17 13:50:59 · 386 阅读 · 0 评论 -
UVALive 3211 (训练指南)图论例题9 2-sat+二分
/** 2-sat模板 **/ #include #include #include #include #include #include using namespace std; const int maxn=2005; //恩,我理解的这个2-sat模板就是用来使得一些变量满足一些题目给的条件, //更准确的说,是每次不能同时满足某两个条件时就形成一个子句,有很多这些子句限制..原创 2017-01-11 23:18:52 · 288 阅读 · 0 评论 -
UVA 11324 有向图强连通分量缩点得SCC图,并在其上求最长路径
#include #include #include #include #include using namespace std; typedef long long ll; const int maxn=50005; vector G[maxn],g[maxn]; int pre[maxn],lowlink[maxn],sccno[maxn],dfs_clock,scc_cnt,sc原创 2017-01-11 20:30:09 · 300 阅读 · 0 评论 -
图论 有向图的强连通分量(模板)LA 4287
#include #include #include #include #include using namespace std; typedef long long ll; const int maxn=50005; vector G[maxn]; int pre[maxn],lowlink[maxn],sccno[maxn],dfs_clock,scc_cnt; stack S;原创 2017-01-11 10:42:38 · 359 阅读 · 0 评论 -
图论 无向图的双连通分量(模板) LA5135
#include #include #include #include #include using namespace std; typedef long long ll; const int maxn=50005; int pre[maxn],iscut[maxn],bccno[maxn],dfs_clock,bcc_cnt; vector G[maxn],bcc[maxn]; s原创 2017-01-10 23:16:16 · 336 阅读 · 0 评论 -
uva 11294 2-sat
/** 挺简单的一道题wa了好久..应该还是当时没完全理解2-sat模板就随便套.. 这个模板中,构造一个有向图G,其中每个变量拆成两个节点2i和2i+1,分别表示xi为假和xi为真,之前是把这两个真假弄反了 对于xi为真或xj为假这样的条件,连有向边2i+1->2j以及2j+1->2i 对于每个没有赋值的变量,设为xi,我们先假定它为假,然后标记节点2i,并沿着有向边标记所有能标记的点,如果过程原创 2017-01-15 09:48:19 · 305 阅读 · 0 评论 -
uva 11396 二分图判定
/** 首先,这个图要满足边数的两倍等于点数乘3。 其次,由于一个爪的中心点不可能与另一个中心点相连,整个图相当于分成两个部分, 中心点和非中心点,所以这个图其实就是一个二分图。 满足这两个条件即可。 **/ #include #include #include #include using namespace std; int color[305]; vector G[305];原创 2017-01-14 17:01:31 · 298 阅读 · 0 评论 -
图论 欧拉回路 uva10054
无向图的欧拉回路判断两个条件 1.所有的点的度为偶数 2.满足1的条件下,所给的图连通 #include #include #include using namespace std; typedef long long ll; int G[1005][1005],d[1005]; void eular(int x) { int i; for(i=1;i<=50原创 2017-01-09 21:58:27 · 336 阅读 · 0 评论 -
uvalive 3713 2-sat
/** 分析:训练指南图论例题10,p327 2-sat **/ #include #include #include #include #include #include using namespace std; const int maxn=100005; struct TwoSAT { int n; vector G[maxn*2]; bool mark[m原创 2017-01-13 20:25:51 · 373 阅读 · 0 评论 -
LA 3523(双连通分量,判断二分图)
以后这个代码用来当模板 #include #include #include #include #include using namespace std; const int maxn=1005; struct Edge { int u,v; Edge(int x,int y){ u=x;v=y; } }; int pre[maxn],iscut[原创 2016-11-21 23:12:37 · 301 阅读 · 0 评论 -
uva 11374(Dijkstra + 枚举)
#include #include #include #include #include using namespace std; const int maxn=505,INF=10000000; int S,E; struct Edge { int from,to,dist; }; struct HeapNode { int d,u; bool operator原创 2016-09-06 19:23:56 · 246 阅读 · 0 评论 -
紫书例题11-8(最大流)
#include #include #include #include using namespace std; const int maxn=45,INF=1000000000; struct Edge { int from,to,cap,flow; Edge(int u,int v,int c,int f):from(u),to(v),cap(c),flow(f){}原创 2016-04-22 13:53:21 · 399 阅读 · 0 评论 -
图论 杂..
二分图 最小顶点覆盖等于最大匹配 证明: 所有的边分为匹配的(A)边和不是匹配的边(B),最小点覆盖的点集就是要每条匹配的边两端顶点中的一个, 比如现在有x1-y1属于A,x1-y2属于B,对于x1-y1这条匹配边取x1而不取y1,这样就能覆盖到x1-y2,即B也能覆盖到。 例题:poj3041原创 2017-03-08 23:12:20 · 311 阅读 · 0 评论