刘汝佳dicnic模板
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<vector> 5 #include<queue> 6 #include<cstring> 7 #define mp make_pair 8 #define pb push_back 9 #define first fi 10 #define second se 11 #define pw(x) (1ll << (x)) 12 #define sz(x) ((int)(x).size()) 13 #define all(x) (x).begin(),(x).end() 14 #define rep(i,l,r) for(int i=(l);i<(r);i++) 15 #define per(i,r,l) for(int i=(r);i>=(l);i--) 16 #define FOR(i,l,r) for(int i=(l);i<=(r);i++) 17 #define eps 1e-9 18 #define PIE acos(-1) 19 #define cl(a,b) memset(a,b,sizeof(a)) 20 #define fastio ios::sync_with_stdio(false);cin.tie(0); 21 #define lson l , mid , ls 22 #define rson mid + 1 , r , rs 23 #define ls (rt<<1) 24 #define rs (ls|1) 25 #define INF 0x3f3f3f3f 26 #define LINF 0x3f3f3f3f3f3f3f3f 27 #define freopen freopen("in.txt","r",stdin); 28 #define cfin ifstream cin("in.txt"); 29 #define lowbit(x) (x&(-x)) 30 #define sqr(a) a*a 31 #define ll long long 32 #define ull unsigned long long 33 #define vi vector<int> 34 #define pii pair<int, int> 35 #define dd(x) cout << #x << " = " << (x) << ", " 36 #define de(x) cout << #x << " = " << (x) << "\n" 37 #define endl "\n" 38 using namespace std; 39 //********************************** 40 struct Edge{ 41 int from,to,cap,flow; 42 }edge; 43 void addedge(int from,int to,int cap) 44 { 45 edge.pb((Edge){from,to,cap,0}); 46 edge.pb((Edge){to,from,0,0}); 47 m=sz(edge); 48 G[from].pb(m-2);G[to].pb(m-1); 49 } 50 struct Dinic{ 51 int n,m,s,t; 52 vector<Edge>edge; 53 vi G[maxn]; 54 int d[maxn]; 55 int cur[maxn]; 56 bool bfs() 57 { 58 cl(vis,0); 59 queue<int>Q; 60 d[s]=0;vis[s]=1;Q.push(s); 61 while(!Q.empty()){ 62 int x=Q.front();Q.pop(); 63 rep(i,0,sz(G[x])){ 64 if(!vis[e.to]&&e.cap>e.flow){ 65 vis[e.to]=1; 66 d[e.to]=d[x]+1; 67 Q.push(e.to); 68 } 69 } 70 } 71 return vis[t]; 72 } 73 int dfs(int x,int a) 74 { 75 if(x==t||a==0)return a; 76 int flow=0,f; 77 rep(i,cur[x],sz(G[x])){ 78 cur[x]=i; 79 Edge& e=edge[G[x][i]]; 80 if(d[x]+1==d[e.to]&&(f=dfs(e.to,min(a,e.cap-e.flow)))>0){ 81 e.flow+=f; 82 edge[G[x][i]^1].flow-=f; 83 flow+=f; 84 a-=f; 85 if(a==0)break; 86 } 87 } 88 return flow; 89 } 90 int Maxflow(int s,int t) 91 { 92 this->s=s;this->t=t; 93 int flow=0; 94 while(bfs()){ 95 cl(cur,0); 96 flow+=dfs(s,INF); 97 } 98 return flow; 99 } 100 }; 101 //********************************** 102 103 //********************************** 104 int main() 105 { 106 107 108 return 0; 109 }