个人简介:
- 一名初二的oier
- 坐标杭州
- 入坑c++ 2年
- 是一名菜鸡
- 这里将存放我的部分题解,学习笔记等
2019/12/12:属于我的hello world!
放一下我的码风:
#include<bits/stdc++.h>
using namespace std;
int n,m,s,t,cnt=1,ans,head[10005],cur[10005],dep[10005],gap[10005];
struct edge{
int nx,to,val;
}e[200005];
inline void add(int u,int v,int w){
e[++cnt].to=v;
e[cnt].val=w;
e[cnt].nx=head[u];
head[u]=cnt;
}
inline void bfs(int sm){
queue<int>q;
q.push(sm);
memset(dep,-1,sizeof dep);
dep[sm]=0,gap[0]=1;
while(!q.empty()){
int x=q.front();
q.pop();
for(int i=head[x];i;i=e[i].nx){
int y=e[i].to;
if(dep[y]!=-1)
continue;
q.push(y);
dep[y]=dep[x]+1;
++gap[dep[y]];
}
}
}
inline int dfs(int x,int flow){
if(x==t){
ans+=flow;
return flow;
}
int u=0,v=0;
for(int i=cur[x];i;i=e[i].nx){
int y=e[i].to;
cur[x]=i;
if(dep[y]+1==dep[x]&&e[i].val){
v=dfs(y,min(flow-u,e[i].val));
if(v){
e[i].val-=v;
e[i^1].val+=v;
u+=v;
}
}
if(u==flow)
return u;
}
--gap[dep[x]];
if(!gap[dep[x]])
dep[s]=n+1;
++gap[++dep[x]];
return u;
}
inline int isap(){
bfs(t);
while(dep[s]<n)
memcpy(cur,head,sizeof head),
dfs(s,INT_MAX);
return ans;
}
int main(){
scanf("%d%d%d%d",&n,&m,&s,&t);
for(int i=1,u,v,w;i<=m;++i){
scanf("%d%d%d",&u,&v,&w);
add(u,v,w);
add(v,u,0);
}
printf("%d",isap());
return 0;
}