~持续更新中~

Prim算法

int k=0;
minn[n]=0; for(int i=1; i<=n; i++) { for(int j=1; j<=n; j++) { if(minn[j]<minn[k]&&!vis[j]) k=j;
    }
    vis[k]=1; for(int j=1; j<=n; j++) { if(!vis[j]&&minn[j]>g[k][j])
            minn[j]=g[k][j];
    }
    k=0;
}

Dinic最大流

 Dinic 最大流

 

 spfa费用流

 spfa费用流

 

 

对拍

:loop
    maker.exe
    std.exe
    my.exe
    fc std.out my.out if %errorlevel%==0 goto loop
pause

对拍2

 View Code

 

tarjan求强连通分量

 tarjan求SCC

次短路模板

struct node { int u,d; bool operator <(node x)const { return d>x.d;
    }
};
priority_queue<node>Q; void spfa() {
    fill(dis,dis+n+1,inf);
    fill(dis2,dis2+n+1,inf);
    Q.push(node{1,0}); while(!Q.empty()) {
        node p=Q.top();
        Q.pop(); int u=p.u,d=p.d; if(dis2[u]<d) continue; for(int i=head[u]; i; i=e[i].next) { int v=e[i].to,d2=d+e[i].w; if(dis[v]>d2) {
                swap(dis[v],d2);
                Q.push(node{v,dis[v]});
            }if(dis2[v]>d2&&dis[v]<d2){
                dis2[v]=d2;
                Q.push(node{v,dis2[v]});
            }
        }
    }
}

 匈牙利算法——二分图匹配

比较好的有关讲解

bool dfs(int u,int t){ for(int i=head[u];i;i=e[i].next){ int v=e[i].to; if(dfn[v]!=t){
            dfn[v]=t; if((!match[v])||dfs(match[v],t)){
                //贪心思想,如果这个点还未匹配,就和他匹配,反之看一看和这个点已经匹配的点能否再找到一个点与之匹配,若能,就将这个点抢过来
          match[v]=u;return true;
            }
        }
    } return false;
}

 高精度

 P1932