算法模板
给糖吃的小骗子
懒人
展开
-
KM算法详解+模板
转自:点击打开链接 现在有N男N女,男生和女生每两个人之间有好感度,我们希望把他们两两配对,并且最后希望好感度和最大。 怎么选择最优的配对方法呢? 首先,每个妹子会有一个期望值,就是与她有好感度的男生中最大的好感度。男生呢,期望值为0,就是,,,只要有一个妹子就可以啦,不挑~~ 这样,我们把每个人的期望值标出来。 然后,开始配对。配对方法:男女两人的期望和要等于两人之间的转载 2017-04-17 20:53:43 · 1269 阅读 · 0 评论 -
Ford-Fulkerson算法模板(最大流)
int dfs(int u,int t,int f) { if(u==t) return f; used[u]=1; for(int i=0;i<g[u].size();i++) { Edge &e=g[u][i]; int v=e.to; if(!used[v]&&e.cap>0) { int d=dfs(v,t,min(e.cap,f)); if(原创 2017-04-23 10:21:15 · 1283 阅读 · 0 评论 -
tarjan最小割点算法模板
void find(int father,int u) { int son=0,cnt=0; dfn[u]=low[u]=++time; for(int i=0;i<e[u].size();i++) { int v=e[u][i]; if(v==father&&cnt==0) //不在使用之前用过的边 { cnt++; continue; }原创 2017-04-19 19:51:57 · 931 阅读 · 0 评论 -
Hopcroft-Karp算法模板(解决二分图最大匹配问题)
#include #include原创 2017-04-18 16:30:56 · 1332 阅读 · 0 评论 -
朱刘算法模板(最小树形图)
int minTreeGra(int root, int n, int m) { int ret = 0; while(true) { //找最小入边 for(int i = 0; i < n; i++) in[i] = INF; for(int i = 0; i < m; i++)原创 2017-04-21 19:29:35 · 957 阅读 · 0 评论 -
st算法模板(区间最值)
f[1,0]表示第1个数起,长度为2^0=1的最大值,其实就是3这个数。f[1,2]=5,f[1,3]=8,f[2,0]=2,f[2,1]=4……从这里可以看出f[i,0]其实就等于a[i]。这样,DP的状态、初值都已经有了,剩下的就是状态转移方程。我们把f[i,j](j≥1)平均分成两段(因为j≥1时,f[i,j]一定是偶数个数字),从i到i+2^(j-1)-1为一段,i+2^(j-1)到i+2原创 2017-04-28 16:28:39 · 667 阅读 · 0 评论 -
Prim算法模板(最小生成树)
void Prim(){ int i,j,k,tmp,ans; for(i=1;i<=n;i++) dis[i]=inf;//初始化 dis[1]=0; for(i=1;i<=n;i++){ tmp=inf; for(j=1;j<=n;j++原创 2017-04-17 09:02:59 · 986 阅读 · 0 评论 -
拓扑排序模板
void tpsort() { int i,u; queueque; for(i=1;i<=count;i++) { if(in[i]==0) que.push(i); //将入度为0的顶点加入队列 } while(!que.empty()) { u=que.front(); que.pop()原创 2017-04-16 17:29:30 · 862 阅读 · 0 评论 -
tarjan算法模板(强连通分量)
int low[10010],dfn[10010],time; //time时间戳 low记录顶点能到达最早的时间戳 dfn记录顶点时间戳 bool instack[10010]; //判断是否在栈内 int count; //强连通分量数 int belong[10010]; // 记录顶点所属的强连通分量 int in[10010];原创 2017-04-16 17:22:55 · 931 阅读 · 1 评论 -
最小费用流模板(Bellman-ford)
int min_cost_flow(int s,int t,int f) { int u,i,v,d,res=0; while(f>0) { bool update=true; for(i=1;i<=n;i++) dis[i]=MAX; dis[s]=0; while(update) { update=false; for(u=1;u<=n;u++)原创 2017-04-16 10:05:05 · 888 阅读 · 0 评论 -
第k短路算法模板
int g[1010][1010]; int n, m, x; const int INF = 0x3f3f3f3f; int vis[1010]; int dist[1010][20]; int main() { while (scanf("%d%d",&n,&m,&x)!=EOF) { //初始化 memset(g, 0x原创 2017-04-30 09:50:52 · 766 阅读 · 0 评论 -
Dinic算法(最大流)
bool bfs(int s,int t) //分层 { int i; memset(len,-1,sizeof(len)); queueque; que.push(s); len[s]=0; while(!que.empty()) { int u=que.front(); que.pop(); for(i=0;i<=t;i原创 2017-04-14 13:32:49 · 1028 阅读 · 1 评论 -
快速排序+归并排序模板
快速排序 void quickSort(int left,int right) { if(left>=right) return ; int i=left,j=right; int mark=a[i]; while(i<j) { while(a[j]>=mark&&i<j) { j--; } a[i]=a[j]; while(a[i]<=mark&&i<j原创 2017-04-28 14:26:56 · 310 阅读 · 0 评论 -
SPFA算法
SPFA(Shortest Path Faster Algorithm)(队列优化)算法是求单源最短路径的一种算法,它还有一个重要的功能是判负环(在差分约束系统中会得以体现),在Bellman-ford算法的基础上加上一个队列优化,减少了冗余的松弛操作,是一种高效的最短路算法。 算法步骤: 该算法需要使用到队列,这里我们用STL的queue 比如求s点到所有点的最短路径。 1,初始化时队列原创 2017-04-06 13:17:55 · 1142 阅读 · 1 评论