
-----------图论------------
Werky_blog
这个作者很懒,什么都没留下…
展开
-
模板:Prim
思路:先把1到 i 的边放进lowcost(反着找结果相同)找lowcost中 1 到 i 的最小值,记录下标(id);再把 id到 i 放进lowcost (lowcost[ id ]赋为-1,表示已经收录过了)mst 可以作为中间变量输出最小树;const int maxn=110;const int maxcost=99999999;int graph[maxn][原创 2017-09-23 13:53:26 · 179 阅读 · 0 评论 -
模板:最小割边数
做一遍最大流,满流设为1,其他为inf,再做一次最大流。注意方向边流量不清零。const int inf = 0x3f3f3f3f;const int maxn = 200 + 5;const int maxs = 3000 + 5;int n,m;struct Edge{ int from,to,cap,flow;};struct Dicnic{ int原创 2017-10-16 14:42:32 · 211 阅读 · 0 评论 -
模板:最大流
Edmonds-Karp:先BFS从起点开始的路径中找最小的容量,找到这么一条路径,到 t 截止。update更新残存容量和运输流量,加到max_flow里,再继续BFS找路径,update,直到没有路径能到 t 了,返回0;edmonds-karp返回最大流。const int maxn=500;const int INF=2110000000;int visited原创 2017-10-08 17:30:15 · 159 阅读 · 0 评论 -
模板:最大流最小割
讲解:https://wenku.baidu.com/view/d9c9b9220722192e4536f6e1.html 给出矩阵时,转换为边存入edges:#define mem(a,x) memset(a,x,sizeof(a))using namespace std;const int inf = 0x3f3f3f3f;const int maxn = 50 +原创 2017-10-12 12:45:55 · 241 阅读 · 0 评论 -
模板:kruskal
思路:用结构体 e 存边,sort 排序,从小到大把边收入,并用并查集表示其端点是否收入。//要注意e是边的长度const int inf=999999999;int n,m,q,fa[1010];struct edge{ int x,y,len;}e[20005];bool cmp(edge a,edge b){ return a.len>b.len;}原创 2017-10-05 16:34:20 · 176 阅读 · 0 评论 -
模板:拓扑排序
拓扑排序:将“小于”关系看做有向图,形成一条排好序的关系,可能不唯一。queue实现,vector存储:const int maxn=10005;int in[maxn],sum,n,m,fa[maxn];vector G[maxn];void toposort(){ queues; int flag=0; for(int i=0;i<n;i++){原创 2017-09-29 00:00:16 · 232 阅读 · 0 评论 -
模板:bellman-ford算法
思路:n-1次:找1 到剩下的n-1个点的最短路,因为是依次找的,所以是累加,dist【n】所以可以表示1 到n的最短路注意:负权双向路径本来就是负权环用于:1:找带负权的最短路 2:找负权环若找正环,dist改为-inf,u+w,最好把flag优化去掉const int maxn=105;const int maxm=maxn*maxn/2;const int inf=原创 2017-10-10 21:58:12 · 220 阅读 · 0 评论 -
模板:Floyed
Floyd可以判断有向环,并查集只能判断无向环。for(int k=0;k<n;k++) for(int i=0;i<n;i++) for(int j=0;j<n;j++) if(d[i][j]<inf&&d[k][j]<inf) d[i][j]=min(d[i][j],d[i][k]+d[k][j]);如果只关心是否原创 2017-10-09 21:31:49 · 241 阅读 · 0 评论 -
构造表达式树
/*加减往上排,乘除括号往下排但仍然是按照自下向顶建树的第二个if(c1<0):没有加减先找括号,括号里的算完了再去找乘除,这里x+1把前括号吞了,便可以计算括号里面的,不会存在没有括号的。*/#include#include#includeusing namespace std;const int maxn=1000;int lch[maxn],rch[maxn];ch原创 2017-09-21 21:25:56 · 1120 阅读 · 0 评论 -
模板:费用流
刘汝佳紫书模板:const int maxn=10001;struct Edge//边{ int from,to,cap,flow,cost;//出点,入点,容量,当前流量,费用(也就是权值) Edge(int u,int v,int c,int f,int w):from(u),to(v),cap(c),flow(f),cost(w){}};struct MCMF原创 2017-10-16 22:16:42 · 267 阅读 · 0 评论 -
模板:Dijkstra 队列优化
/*Dijkstra的算法思想:在所有没有访问过的结点中选出dis(s,x)值最小的x对从x出发的所有边(x,y),更新dis(s,y)=min(dis(s,y),dis(s,x)+dis(x,y))*/#include #include #include #include using namespace std;const int Ni = 10000;const int原创 2017-10-05 22:32:59 · 328 阅读 · 0 评论