UVA 11045 - My T-shirt suits me
2012-02-26 20:22
375 查看
这是一道网络流的题。将六种不同大小的衣服看成六个点,编号1-6,
将志愿者从7-M +6编号,然后源点s = 0, 汇点t = M + 7,网络
流的模型就出来了。从源点到衣服的容量是N / 6,从志愿者到汇点
的容量是1, 从衣服到志愿者的容量也是1.然后就按照白书上
的EK算法写,用BFS找增广路。
将志愿者从7-M +6编号,然后源点s = 0, 汇点t = M + 7,网络
流的模型就出来了。从源点到衣服的容量是N / 6,从志愿者到汇点
的容量是1, 从衣服到志愿者的容量也是1.然后就按照白书上
的EK算法写,用BFS找增广路。
#include<iostream> #include<cstring> #include<queue> #define INF 100000000 #define MAXD 50 using namespace std; int flow[MAXD][MAXD], cap[MAXD][MAXD], p[MAXD], a[MAXD]; char str[][5] = {"\0", "XXL", "XL", "L", "M", "S", "XS"}; char ch1[5], ch2[5]; int s, t; int N, M; int min( int a, int b) { return a < b ? a : b; } void init() { int j, k; memset( cap, 0, sizeof cap); cin >> N >> M; s = 0, t = M + 7; for( int i = 1; i <= 6; i ++) cap[s][i] = N / 6; for( int i = 7; i < t; i ++) { cin >> ch1 >> ch2; for( j = 1; strcmp( ch1, str[j]) != 0; j ++); //找到第一件衣服的编号 for( k = 1; strcmp( ch2, str[k]) != 0; k ++); //分号不能少 cap[j][i] = cap[k][i] = 1; cap[i][t] = 1; } } bool EK() { queue<int> q; memset( flow, 0, sizeof flow); //memset( p, 0, sizeof p); int f = 0; for( ; ; ) { memset( a, 0, sizeof a); a[s] = INF; q.push(s); while( !q.empty() ) { int u = q.front(); q.pop(); for( int v = s; v <= t; v ++) if( !a[v] && cap[u][v] > flow[u][v]) { p[v] = u; q.push(v); a[v] = min( a[u], cap[u][v] - flow[u][v]); } } if( a[t] == 0) break; for( int u = t; u != s; u = p[u]) { flow[ p[u]][u] += a[t]; //更新正向流量 flow[u][ p[u]] -= a[t]; //更新反向流量 } f += a[t]; } if( f == M) return true; return false; } int main() { int cas; cin >> cas; while( cas --) { init(); bool ok = EK(); if( ok) cout << "YES" << endl; else cout << "NO" << endl; } return 0; }
相关文章推荐
- UVa 11045 - My T-shirt suits me(最大流)
- uva 11045 My T-shirt suits me
- UVA 11045 My T-shirt suits me
- UVA 11045 My T-shirt suits me
- UVA - 11045 My T-shirt suits me 网络流
- uva 11045 - My T-shirt suits me(dfs)
- uva 11045 My T-shirt suits me (二分图匹配 最大流)
- UVa 11045 - My T-shirt suits me(最大流)
- uva 11045 My T-shirt suits me
- UVA 11045 My T-shirt suits me 网络流构图
- UVA 11045 My T-shirt suits me【二部图是否全匹配+DFS邻接矩阵实现】
- UVa 11045 My T-shirt suits me (网络流建图+最大流)
- UVA 11045 My T-shirt suits me
- UVa 11045 My T-shirt suits me / 二分图
- UVA - 11045 My T-shirt suits me (最大流-二分图匹配)
- UVa 11045 My T-shirt suits me
- My T-shirt suits me - UVa 11045 最大流
- UVa 11045 - My T-shirt suits me(最大流)
- UVa11045 My T-shirt suits me( 最大流 )
- UVA 11045-My T-shirt suits me(二分图匹配)