【loj】#6000. 「网络流 24 题」搭配飞行员(二分图匹配)
2017-07-17 18:39
375 查看
记录一个菜逼的成长。。
题目链接
网络流虽然看过,但一直没系统的学过。现在一边复习,一边研究一下。。
都是模板题。
二分图匹配。
题目链接
网络流虽然看过,但一直没系统的学过。现在一边复习,一边研究一下。。
都是模板题。
二分图匹配。
#include <bits/stdc++.h> using namespace std; #define ALL(v) (v).begin(),(v).end() #define cl(a,b) memset(a,b,sizeof(a)) #define clr clear() #define pb push_back #define mp make_pair #define fi first #define se second #define fin freopen("D://in.txt","r",stdin) #define fout freopen("D://out.txt","w",stdout) #define lson t<<1,l,mid #define rson t<<1|1,mid+1,r #define ls t<<1 #define rs ls|1 #define seglen(t) (node[t].r-node[t].l+1) #define lowbit(x) (x)&(-x) typedef long long LL; typedef pair<int,int> PII; const int INF = 0x3f3f3f3f; //O(N^2*M) const int MAX_V = 10000 + 10; struct edge{ int to,cap,rev; edge(){} edge(int _to,int _cap,int _rev):to(_to),cap(_cap),rev(_rev){} }; vector<edge>G[MAX_V]; int level[MAX_V]; int iter[MAX_V]; void add(int from,int to,int cap) { G[from].push_back(edge(to,cap,G[to].size())); G[to].push_back(edge(from,0,G[from].size()-1)); } void bfs(int s) { memset(level,-1,sizeof(level)); queue<int>que; level[s] = 0; que.push(s); while(!que.empty()){ int f = que.front(); que.pop(); for( int i = 0; i < G[f].size(); i++ ){ edge &e = G[f][i]; if(e.cap > 0 && level[e.to] == -1){ level[e.to] = level[f] + 1; que.push(e.to); } } } } int dfs(int v,int t,int f) { if(v == t)return f; for( int &i = iter[v]; i < G[v].size(); i++ ){ edge &e = G[v][i]; if(e.cap > 0 && level[v] < level[e.to]){ int d = dfs(e.to,t,min(e.cap,f)); if(d > 0){ e.cap -= d; G[e.to][e.rev].cap += d; return d; } } } return 0; } int max_flow(int s,int t) { int flow = 0; for(;;){ bfs(s); if(level[t] == -1)return flow; memset(iter,0,sizeof(iter)); int f; while((f = dfs(s,t,INF)) > 0) flow += f; } } int main() { int n,m; while(~scanf("%d%d",&n,&m)){ int s = 0,t = n + m + 1; int a,b; for( int i = 1; i <= m; i++ ) add(s,i,1); while(~scanf("%d%d",&a,&b)){ add(a,b,1); } for( int i = m+1; i <= n; i++ ){ add(i,t,1); } printf("%d\n",max_flow(s,t)); } return 0; }
相关文章推荐
- [Loj] #6000. 「网络流 24 题」搭配飞行员
- [LOJ.AC]#6000. 「网络流 24 题」搭配飞行员
- LibreOJ #6000. 「网络流 24 题」搭配飞行员
- 【网络流24题 搭配飞行员】二分图匹配
- libreoj 6000. 「网络流 24 题」搭配飞行员
- 【网络流24题】搭配飞行员(最大流+二分图匹配)
- Cogs 14. [网络流24题] 搭配飞行员(二分图匹配)
- 二分图匹配——Luogu2756 [网络流24题]飞行员配对方案问题
- [网络流24题-1]cogs14搭配飞行员
- [COGS 0014][网络流24题] 搭配飞行员
- [网络流24题] 搭配飞行员
- 【网络流24题】搭配飞行员
- 【网络流24题】【COGS14】飞行员搭配问题
- [网络流24题] No1_ 搭配飞行员
- cogs_14_搭配飞行员_(二分图匹配+最大流,网络流24题#01)
- CJOJ 1494 【网络流24题】 搭配飞行员(二分图最大匹配)
- [网络流24题] 01 搭配飞行员(最大流)
- LOJ6000 - 「网络流 24 题」搭配飞行员
- 【网络流24题】搭配飞行员
- COGS 14 [网络流24题] 搭配飞行员