#include <cstdio> #include <cstring> #include <algorithm> #include <climits> #include <string> #include <iostream> #include <map> #include <cstdlib> #include <list> #include <set> #include <queue> #include <stack> using namespace std; const int INF=0xfffffff; int n,m; const int maxn=1111; int level[maxn]; int Map[maxn][maxn]; int last[maxn]; int s,e; int pig[maxn]; bool bfs() { memset(level,0,sizeof(level)); queue<int> q; q.push(s);level[s]=1; while(!q.empty()){ int cur=q.front();q.pop(); for(int i=0;i<=n+1;i++){ if(!level[i]&&Map[cur][i]){ level[i]=level[cur]+1; q.push(i); } } } return level[e]; } int Min(int a,int b) { return a>b?b:a; } int dfs(int x,int val) { int tem=val; if(x==e) return val; for(int i=0;i<=n+1;i++){ if(level[i]==level[x]+1&&Map[x][i]&&tem){ int t=dfs(i,Min(val,Map[x][i])); Map[x][i]-=t;Map[i][x]+=t;