您的位置:首页 > 其它

放两个模版

2015-08-30 18:23 141 查看
最大流

struct edge{
int v,w;
edge*next,*r;
}e[maxm],*fir[maxn],*cur[maxn],*pt=e;
void add(int u,int v,int w){
pt->v=v;pt->w=w;
pt->next=fir[u];
fir[u]=pt++;
}
void addedge(int u,int v,int w){
add(u,v,w);add(v,u,0);
fir[u]->r=fir[v];fir[v]->r=fir[u];
}
bool bfs(){
queue<int>Q;Q.push(S);
clr(d,0);d[S]=1;
while(!Q.empty()){
int x=Q.front();Q.pop();
for(edge*e=fir[x];e;e=e->next){
if(e->w&&!d[e->v]){
d[e->v]=d[x]+1;Q.push(e->v);
}
}
}
return d[T];
}
int dfs(int x,int w){
if(x==T||!w) return w;
int f=0;
for(edge*&e=cur[x];e;e=e->next){
if(e->w&&d[e->v]==d[x]+1){
int g=dfs(e->v,min(e->w,w));
if(g>0){
f+=g;
e->w-=g;
e->r->w+=g;
if(!(w-=g)) break;
}
}
}
return f;
}


View Code
最小费用最大流

待补。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: