//Dinic
struct Edge{
int from,to,cap,flow;
Edge(){ }
Edge(int a,int b,int c,int d){
from=a;
to=b;
cap=c;
flow=d;
}
}edges[maxm*];
int n,m,s,t,sz;
vector<int> ve[maxn];
int dis[maxn],cur[maxn];
bool vis[maxn];
int l,r;
void addEdge(int a,int b,int c)
{
edges[sz++]=Edge(a,b,c,);
edges[sz++]=Edge(b,a,,);
ve[a].push_back(sz-);
ve[b].push_back(sz-);
}
bool BFS(){
memset(vis,,sizeof(vis));
queue<int> qu;
qu.push(s);
dis[s]=;
vis[s]=;
while(qu.size()){
int u=qu.front();qu.pop();
for(int i=;i<ve[u].size();i++){
Edge& e=edges[ve[u][i]];
if(!vis[e.to] && e.flow<e.cap){
vis[e.to]=;
qu.push(e.to);
dis[e.to]=dis[u]+;
}
}
}
return vis[t];
}
int DFS(int x,int a)
{
if(x==t || a==)return a;
int flow=,f;
for(int& i=cur[x];i<ve[x].size();i++){
Edge e=edges[ve[x][i]];
if(dis[x]+==dis[e.to] && (f=DFS(e.to,min(a,e.cap-e.flow)))>){
flow+=f;
a-=f;
edges[ve[x][i]].flow+=f;
edges[ve[x][i]^].flow-=f;
if(a==)break;
}
}
return flow;
}
int dinic()
{
int flow=;
while(BFS()){
memset(cur,,sizeof(cur));
flow += DFS(s,);
}
return flow;
}

最新文章

  1. Oracle数据泵(Data Dump)错误汇集
  2. 2016的ChinaJoy沦为ChinaVR?
  3. MiniUI中DataGrid数据的载入
  4. Sprint(第九天11.22)
  5. C语言 值传递和地址传递
  6. ArcMap 操作笔记
  7. extJs学习基础
  8. mysql导出导入
  9. MYSQL集群的搭建
  10. tabBaritem的图片偏移
  11. windows系统下Tomcat与Apache服务器集成
  12. Python背景色与语法高亮主题配置
  13. (译)如何在ASP.NET中安全使用ViewState
  14. JSON 之JAVA 解析
  15. C# ITextShap 生成PDF 下载
  16. Java主线程等待子线程、线程池
  17. 上mongodb创建一些吸取的经验教训指数
  18. token 入门教程
  19. JS中的算法与数据结构——排序(Sort)(转)
  20. pytorch_SRU(Simple Recurrent Unit)

热门文章

  1. mii-tool与ethtool的用法详解
  2. [洛谷P1401]城市
  3. MySQL之SELECT 语句详解
  4. BZOJ1452 [JSOI2009]Count 【树套树 (树状数组)】
  5. [codechef MEXDIV]Mex division
  6. WebKit学习资源
  7. jsp中的路径问题
  8. [POJ1082&amp;POJ2348&amp;POJ1067&amp;POJ2505&amp;POJ1960]简单博弈题总结
  9. [bzoj3884]上帝与集合的正确用法——欧拉函数
  10. webstorm es6 语法报错