题意:给你n张照片的范围,n个点的坐标,问你能唯一确定那几个点属于那几张照片,例如样例中4唯一属于A,2唯一属于C,1唯一属于B,3唯一属于C

思路:进行二分图完全匹配,怎么判断唯一属于?匹配完之后删掉某一条匹配边再跑一次二分图匹配,如果还能完全匹配,那么就不是唯一,反之唯一。

代码:

  1. #include<set>
  2. #include<map>
  3. #include<stack>
  4. #include<cmath>
  5. #include<queue>
  6. #include<vector>
  7. #include<string>
  8. #include<cstdio>
  9. #include<cstring>
  10. #include<sstream>
  11. #include<iostream>
  12. #include<algorithm>
  13. typedef long long ll;
  14. using namespace std;
  15. const int maxn = + ;
  16. const int MOD = 1e9 + ;
  17. const int INF = 0x3f3f3f3f;
  18. struct node{
  19. int x1, x2, y1, y2;
  20. }p[maxn];
  21. struct Node{
  22. int x, y;
  23. }a[maxn];
  24. struct Edge{
  25. int to, next;
  26. }edge[maxn * ];
  27. int g[maxn][maxn], linker[maxn], ans[maxn], n;
  28. bool used[maxn];
  29. bool dfs(int u){
  30. for(int v = ; v < * n; v++){
  31. if(g[u][v] && !used[v]){
  32. used[v] = true;
  33. if(linker[v]== - || dfs(linker[v])){
  34. linker[v] = u;
  35. return true;
  36. }
  37. }
  38. }
  39. return false;
  40. }
  41. int hungary(){
  42. int res = ;
  43. memset(linker, -, sizeof(linker));
  44. for(int u = ; u < * n; u++){
  45. memset(used, false, sizeof(used));
  46. if(dfs(u)) res++;
  47. }
  48. return res;
  49. }
  50. bool inside(node m, Node n){
  51. if(n.x > m.x1 && n.x < m.x2 && n.y > m.y1 && n.y < m.y2) return true;
  52. return false;
  53. }
  54. int main(){
  55. int ca = ;
  56. while(~scanf("%d", &n) && n){
  57. for(int i = ; i < n; i++){
  58. scanf("%d%d%d%d", &p[i].x1, &p[i].x2, &p[i].y1, &p[i].y2);
  59. }
  60. memset(g, , sizeof(g));
  61. for(int i = ; i < n; i++){
  62. scanf("%d%d", &a[i].x, &a[i].y);
  63. for(int j = ; j < n; j++){
  64. if(inside(p[j], a[i])){
  65. g[i][n + j] = g[n + j][i] = ;
  66. }
  67. }
  68. }
  69. printf("Heap %d\n", ca++);
  70. int ret = hungary();
  71. memcpy(ans, linker, sizeof(ans));
  72. if(ret != * n) printf("none\n");
  73. else{
  74. bool ok = false;
  75. for(int i = n; i < * n; i++){
  76. g[i][ans[i]] = g[ans[i]][i] = ;
  77. ret = hungary();
  78. if(ret == * n) continue;
  79. printf("%s(%c,%d)", ok == true? " " : "",'A' + (i - n), ans[i] + );
  80. ok = true;
  81. g[i][ans[i]] = g[ans[i]][i] = ;
  82. }
  83. if(!ok) printf("none\n");
  84. else printf("\n");
  85. }
  86. printf("\n");
  87. }
  88. return ;
  89. }

POJ 1486 Sorting Slides(二分图完全匹配必须边)题解的更多相关文章

  1. POJ 1486 Sorting Slides (二分图关键匹配边)

    题意 给你n个幻灯片,每个幻灯片有个数字编号1~n,现在给每个幻灯片用A~Z进行编号,在该幻灯片范围内的数字都可能是该幻灯片的数字编号.问有多少个幻灯片的数字和字母确定的. 思路 确定幻灯片的数字就是 ...

  2. poj 1486 Sorting Slides(二分图匹配的查找应用)

    Description Professor Clumsey is going to give an important talk this afternoon. Unfortunately, he i ...

  3. POJ 1486 Sorting Slides (KM)

    Sorting Slides Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2831   Accepted: 1076 De ...

  4. poj 1486 Sorting Slides

    Sorting Slides Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4469   Accepted: 1766 De ...

  5. POJ 1486 Sorting Slides(二分图匹配)

    [题目链接] http://poj.org/problem?id=1486 [题目大意] 给出每张幻灯片的上下左右坐标,每张幻灯片的页码一定标在这张幻灯片上, 现在问你有没有办法唯一鉴别出一些幻灯片 ...

  6. POJ 1486 Sorting Slides【二分图匹配】

    题目大意:有n张幻灯片和n个数字,幻灯片放置有重叠,每个数字隶属于一个幻灯片,现在问你能够确定多少数字一定属于某个幻灯片 思路:上次刷过二分图的必须点后这题思路就显然了 做一次二分匹配后将当前匹配的边 ...

  7. POJ 1486 Sorting Slides(寻找必须边)

    题意:找出幻灯片与编号唯一对应的情况 思路: 1:求最大匹配,若小于n,则答案为none,否则转2 (不过我代码没有事先判断一开始的最大匹配数是否<n,但这样也过了,估计给的数据最大匹配数一定为 ...

  8. 【POJ】1486:Sorting Slides【二分图关键边判定】

    Sorting Slides Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 5390   Accepted: 2095 De ...

  9. poj 1486 纸张与数字匹配(二分图+割边处理)

    题目来源:http://poj.org/problem?id=1486 题意: 算出所有独一无二的字母与数字的组合,使二分图完全匹配 我以为所有点都要独一无二匹配时输出匹配方法 题解: 先得到一个完全 ...

随机推荐

  1. Python - 5.Exception Handling

    From:http://interactivepython.org/courselib/static/pythonds/Introduction/ExceptionHandling.html Exce ...

  2. 【Hive学习之六】Hive Lateral View &视图&索引

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 hadoop-3.1.1 apache-hive-3.1.1 ...

  3. python seek()方法报错:“io.UnsupportedOperation: can't do nonzero cur-relative seeks”

    今天使用seek()时报错了, 看下图 然后就百度了一下,找到了解决方法 这篇博客https://www.cnblogs.com/xisheng/p/7636736.html 帮忙解决了问题, 照理说 ...

  4. localstorage跨域解决方案

    localstorage也存在 跨域的问题, [解决思路如下] 在A域和B域下引入C域,所有的读写都由C域来完成,本地数据存在C域下; 因此 A哉和B域的页面必定要引入C域的页面; 当然C域最好是主域 ...

  5. [转载] mysql 索引中的USING BTREE 的意义

    索引是在存储引擎中实现的,因此每种存储引擎的索引都不一定完全相同,并且每种存储引擎也不一定支持所有索引类型. 根据存储引擎定义每个表的最大索引数和最大索引长度.所有存储引擎支持每个表至少16个索引,总 ...

  6. [转载]WeeksInAYear、WeeksInYear、DaysInAYear、DaysInAMonth、DaysInYear、DaysInMonth - 获取指定年月的周、日数

    DateUtils.DaysInYear(); DateUtils.DaysInMonth(); DateUtils.DaysInAYear(); DateUtils.DaysInAMonth(); ...

  7. 大数据学习路线:Hadoop集群同步技术分享

    今天给大家带来的技术分享是——Hadoop集群同步. 一.同步方式 选择一个机器,作为时间服务器(这里选择hadoop01),所有的机器与这台集群时间进行定时的同步,比如,每隔十分钟,同步一次时间. ...

  8. 前端框架VUE----补充

    修饰符 .lazy 在默认情况下,v-model 在每次 input 事件触发后将输入框的值与数据进行同步 .你可以添加 lazy 修饰符,从而转变为使用 change 事件进行同步: <!-- ...

  9. oj练习---dp专题

    1.POJ 3744 Scout YYF I 经典的dp模型,但是要用到快速矩阵幂加速,分段的思想 # include <stdio.h> # include <algorithm& ...

  10. Linux centos7 下 svn 服务器搭建

    摘自:https://www.cnblogs.com/mymelon/p/5483215.html 鉴于在搭建时,参考网上很多资料,网上资料在有用的同时,也坑了很多人 本文的目的,也就是想让后继之人在 ...