UVA 11045-My T-shirt suits me(二分图匹配)
2015-08-20 10:03
417 查看
题意:有N件T恤,N是6的倍数,因为有6种型号,每种件数相同,有M个人,每个人有两种型号的T恤适合他,每个人可以挑其中的一种,问能否所有的人都能分配到T恤。
解析:典型的二分图匹配,每N/6为同种T恤,对于单个人,将他与它适合的两种T恤的所有标号连边,最后计算最大匹配,如果小于M,则不可行,否则可行。
代码如下:
解析:典型的二分图匹配,每N/6为同种T恤,对于单个人,将他与它适合的两种T恤的所有标号连边,最后计算最大匹配,如果小于M,则不可行,否则可行。
代码如下:
#include<cstdio> #include<cstring> #include<string> #include<algorithm> #include<set> #include<map> #include<queue> #include<vector> #include<iterator> #include<utility> #include<sstream> #include<iostream> #include<cmath> #include<stack> using namespace std; const int INF=1000000007; const double eps=0.00000001; vector<int> G[40]; int le[40],ri[40]; int N,M; string type[]={"S","M","L","XS","XL","XXL"}; //6种型号的T恤 bool vis[40]; bool dfs(int cur) //二分图匹配模板 { if(vis[cur]) return false; vis[cur]=true; for(int i=0;i<G[cur].size();i++) { int to=G[cur][i]; if(ri[to]==-1||dfs(ri[to])) { le[cur]=to; ri[to]=cur; return true; } } return false; } bool Match() { int ret=0; memset(le,-1,sizeof(le)); memset(ri,-1,sizeof(ri)); for(int i=1;i<=N;i++) { memset(vis,false,sizeof(vis)); if(dfs(i)) ret++; //如果能匹配,则加1 if(ret==M) return true; //达到M,直接返回真 } return false; } int main() { int T; cin>>T; map<string,int> ma; for(int i=0;i<6;i++) ma[type[i]]=i; //将T恤型号映射成编号 while(T--) { cin>>N>>M; for(int i=1;i<=N;i++) G[i].clear(); int every=N/6; string A,B; for(int i=1;i<=M;i++) { cin>>A>>B; int a=ma[A],b=ma[B]; for(int st=a*every+1;st<=(a+1)*every;st++) G[st].push_back(i); // 建立临接表,与所有为a的T恤的标号连边 for(int st=b*every+1;st<=(b+1)*every;st++) G[st].push_back(i); } if(Match()) printf("YES\n"); else printf("NO\n"); } return 0; }
相关文章推荐
- UIElementCollection
- dpkg: error processing package bluez (--configure) 解决方法
- 【转载】使用SoapUI 测试Web Service
- 后台UI模板开发规范
- NGUI sprite 裁剪到其他图片sprite
- UITableView总结
- Algorithms—128.Longest Consecutive Sequence
- Handler详解(二)---关联到非UI线程
- 详解 $_SERVER 函数中QUERY_STRING和REQUEST_URI区别
- UITextView 监听点击了returnKey 的方法
- Qt:将quick的控件图像保存为QImage
- iOS UI16_数据持久化
- Xcode环境变量 build Settings 设置
- iOS 9学习系列:UIStackView如何让你的开发更简单
- PHP中 include, include_once, require, require_once的区别
- Havok_2014-1-0_Pc_Xs_User_Guide(2.2.1-创建一个Physics2012对象)
- IOS开发UI阶段 第六周
- iOS开发笔记--iphone练习之手势识别(双击、捏、旋转、拖动、划动、长按)UITapGestureRecognize
- poj 1679 The Unique MST 【次小生成树+100的小数据量】
- iOS多线程-03-NSOperation与NSOperationQueue