#include #include #include using namespace std; const int N=5005; const int M=1000001; const int inf=1<<30; int cnt,n,m,s,t; int head[N]; int NN; struct Edge { int v,next,w; }edge[M]; void addedge(int u,int v,int w) { edge[cnt].v=v; edge[cnt].w=w; edge[cnt].next=head[u]; head[u]=cnt++; edge[cnt].v=u; edge[cnt].w=0; edge[cnt].next=head[v]; head[v]=cnt++; } int sap() { int pre[N],cur[N],dis[N],gap[N]; int flow=0,aug=inf,u; bool flag; for(int i=1;i<=NN;i++) { cur[i]=head[i]; gap[i]=dis[i]=0; } gap[s]=NN; u=pre[s]=s; while(dis[s]0&&dis[u]==dis[v]+1) { flag=1; if(edge[j].w0&&dis[v]