POJ - 1486 Sorting Slides 二分图 完美匹配
2015-06-09 15:24
399 查看
题目大意:有n张透明的矩形纸张散乱在桌面上,每张纸张上面都有一个数字。
现在给出每个矩形的左下角和右上角坐标和每个数字所在的位置,问能否找出每个矩形唯一的对应数字
解题思路:分析该题可得到,二分图匹配的结果肯定是完美匹配,匹配的结果肯定为n。
接着就要判断每个点是否唯一匹配了
判断能否唯一匹配,就要在完美匹配的情况下,删除该点的那条匹配,如果还能再找出一个完美匹配,那么就表示该点表示不唯一
现在给出每个矩形的左下角和右上角坐标和每个数字所在的位置,问能否找出每个矩形唯一的对应数字
解题思路:分析该题可得到,二分图匹配的结果肯定是完美匹配,匹配的结果肯定为n。
接着就要判断每个点是否唯一匹配了
判断能否唯一匹配,就要在完美匹配的情况下,删除该点的那条匹配,如果还能再找出一个完美匹配,那么就表示该点表示不唯一
[code]#include<cstdio> #include<vector> #include<cstring> using namespace std; const int N = 110; struct slides{ int x1, x2, y1, y2; }S ; vector<int> g ; int vis , link , save , n, Max, u1, u2; void init() { for(int i = 0; i < n; i++) { scanf("%d%d%d%d", &S[i].x1, &S[i].x2, &S[i].y1, &S[i].y2); g[i].clear(); } int x, y; for(int i = 0; i < n; i++) { scanf("%d%d", &x, &y); for(int j = 0; j < n; j++) if(x >= S[j].x1 && x <= S[j].x2 && y >= S[j].y1 && y <= S[j].y2) g[j].push_back(i); } u1 = -1, u2 = -1; } bool dfs(int u) { for(int i = 0; i < g[u].size(); i++) { if(vis[g[u][i]]) continue; if(u == u1 && g[u][i] == u2) continue; vis[g[u][i]] = 1; if(link[g[u][i]] == -1 || dfs(link[g[u][i]])) { link[g[u][i]] = u; save[u] = g[u][i]; return true; } } return false; } int hungary() { int ans = 0; memset(link,-1,sizeof(link)); memset(save,-1,sizeof(save)); for(int i = 0; i < n; i++) { memset(vis, 0, sizeof(vis)); if(dfs(i)) ans++; } return ans; } void print() { int flag = false; int t ; for(int i = 0; i < n; i++) t[i] = save[i]; for(int i = 0; i < n; i++) { if(t[i] == -1) continue; u1 = i, u2 = t[i]; if(hungary() != Max) { if(flag) printf(" "); printf("(%c,%d)", 'A' + i, t[i] + 1); flag = true; } } if(!flag) printf("none\n"); else printf("\n"); } int main() { int cas = 1; while(scanf("%d", &n) != EOF && n) { init(); printf("Heap %d\n", cas++); Max = hungary(); print(); printf("\n"); } return 0; }
相关文章推荐
- AysncTask
- 说出 Servlet 的生命周期,并说出 Servlet 和 CGI( Common Gateway Interface)的区别?
- 嵌入式Linux常见问题
- 从零开始制作H5应用(4)——V4.0,加入文字并给文字加特效
- Mysql相关
- Linux下交互式添加用户脚本(四个示例)
- 导出带格式Excel插件msexcel-builder
- 黑马程序员——java基础(语法)
- FindBugs规则整理
- Http协议
- git教程-使用github进行版本管理
- MySQL事件 Events
- 【Divided Two】cpp
- 打通版微社区(6):部署微信插件及开通QQ云服务
- 配置Centos服务器
- ###《More Effective C++》- 基础议题
- mysql 和excel相互转换
- 如果debug 启动spring 时跳到concurrentHashMap中……
- Base64与Image依据具体业务需求互转
- SAT作文写作指导--创新类和欺骗类