题意:找出幻灯片与编号唯一对应的情况

思路: 1:求最大匹配,若小于n,则答案为none,否则转2

    (不过我代码没有事先判断一开始的最大匹配数是否<n,但这样也过了,估计给的数据最大匹配数一定为n吧)

   2:删除一条边e,以e的一个端点找增广路,若不能找到增广路则e是必须边

    也就是重新计算匹配数,如果匹配数减少说明此边是必须也是唯一的.    如果一样说明这边存不存在都行.转3

   3:恢复原图,继续步骤2,直到每条边都被删除过

刚开始看网上别人的代码,有一点看不懂,那就是为什么只要找到唯一对应的就输出。

而不是最后当确定所有的幻灯片都唯一确定后再一起输出,否则只要有一个不唯一确定就输出"none" 。

后来网上查了查,发现:只要能推出多少唯一对应的,就唯一显示多少,只有全部不能推出来才显示“none”!!!!!!!!!! 坑死我了啊!

举个例子:

5

10 40 40 70

20 50 30 60

30 60 20 50

45 70 10 40

45 70 10 40

25 55

35 55

35 45

55 25

65 25           答案: Heap 1 (C,3)

#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <string.h>
#include <queue> using namespace std; int n,cnt;
bool flag;
int edge[][]; //edge[i][j]表示j点在第i张幻灯片里
int used[];
int matchx[]; struct Slide{
int xmin,xmax,ymin,ymax;
}slide[]; struct Num{
int x,y;
}num[] ; void deal(){
for(int i=;i<n;i++){
for(int j=;j<n;j++){
if((slide[i].xmin<=num[j].x)&&(num[j].x<=slide[i].xmax)&&(slide[i].ymin<=num[j].y)&&(num[j].y<=slide[i].ymax))
edge[i][j]=;
}
}
} bool dfs(int k){
for(int i=;i<n;i++){
if(edge[k][i]&&!used[i]){
used[i]=;
if(matchx[i]==- || dfs(matchx[i])){
matchx[i]=k;
return true;
}
}
}
return false;
} int hungry(){
cnt=;
memset(matchx,-,sizeof(matchx));
for(int i=;i<n;i++){
memset(used,,sizeof(used));
if(dfs(i)){
cnt++;
}
}
return cnt;
} int main()
{
int cases=;
while(scanf("%d",&n)!=EOF){
if(n==)
break;
memset(edge,,sizeof(edge)); flag=false;
cases++; for(int i=;i<n;i++){
scanf("%d%d%d%d",&slide[i].xmin,&slide[i].xmax,&slide[i].ymin,&slide[i].ymax);
}
for(int i=;i<n;i++){
scanf("%d%d",&num[i].x,&num[i].y);
} deal(); printf("Heap %d\n",cases);
for(int i=;i<n;i++){
for(int j=;j<n;j++){
if(edge[i][j]==)
continue;
edge[i][j]=;
//如果删去边(i,j),匹配数减少,说明是必须边。
if(hungry()<n){
flag=true;
char ch='A'+i;
printf("(%c,%d) ",ch,j+);
}
edge[i][j]=;
}
} if(!flag){
printf("none\n\n");
}
else{
printf("\n\n");
}
}
return ;
}

POJ 1486 Sorting Slides(寻找必须边)的更多相关文章

  1. POJ 1486 Sorting Slides (KM)

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

  2. poj 1486 Sorting Slides

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

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

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

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

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

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

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

  6. POJ 1486 Sorting Slides(二分图完全匹配必须边)题解

    题意:给你n张照片的范围,n个点的坐标,问你能唯一确定那几个点属于那几张照片,例如样例中4唯一属于A,2唯一属于C,1唯一属于B,3唯一属于C 思路:进行二分图完全匹配,怎么判断唯一属于?匹配完之后删 ...

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

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

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

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

  9. ACM: poj 1094 Sorting It All Out - 拓扑排序

    poj 1094 Sorting It All Out Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%lld & ...

随机推荐

  1. Android开发代码规范

    目录 1.命名基本原则  2.命名基本规范 2.1编程基本命名规范 2.2分类命名规范 3.分类命名规范 3.1基本数据类型命名规范 3.2控件命名规范 3.3变量命名规范 3.4整个项目的目录规范化 ...

  2. 《ISCSI集中存储》RHEL6——CE

    集中存储的作用: 服务端的多余的分区,客户端可以拿来存储数据,并且所存储的数据直接写在服务器的硬盘上,当客户端A崩溃时,其他客户端依旧可以从服务器端访问到客户端A存储的数据. 服务器配置: Iptab ...

  3. ubuntu 14.04 下 安装samba 及SSH 服务端的方法

    之前说了 FTP服务器的搭建:http://www.cnblogs.com/bcsflilong/p/4200139.html 今天说一下samba 和ssh服务器的搭建. 先说samba 吧. 在u ...

  4. 推荐一些C#相关的网站、资源和书籍

    一.网站 1.http://msdn.microsoft.com/zh-CN/ 微软的官方网站,C#程序员必去的地方.那里有API开发文档,还有各种代码.资源下载. 2.http://social.m ...

  5. [大牛翻译系列]Hadoop(15)MapReduce 性能调优:优化MapReduce的用户JAVA代码

    6.4.5 优化MapReduce用户JAVA代码 MapReduce执行代码的方式和普通JAVA应用不同.这是由于MapReduce框架为了能够高效地处理海量数据,需要成百万次调用map和reduc ...

  6. PHP取二进制文件头快速判断文件类型的实现代码

    通过读取文件头信息来识别文件的真实类型. 一般我们都是按照文件扩展名来判断文件类型,但是这个很不靠谱,轻易就通过修改扩展名来躲避了,一般必须要读取文件信息来识别,PHP扩展中提供了类似 exif_im ...

  7. 关于查看Android系统源码【Written By KillerLegend】

    可能你会想下载Android系统源码,但是我不知道你会看多少系统的源码,如果你对源码只是偶尔看一次的话,推荐你在线看Android的系统源码,下面提供几种查看android系统源码的方法. 1:打开这 ...

  8. C#中Delegate

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  9. Golang学习笔记

    一.基础 1. Hello World程序 demo: package main import "fmt" // 注释 //注释 func main() { fmt.Printf( ...

  10. ArcGIS操作问题

    1.利用分析工具——叠加分析——“空间连接”工具,将完全包含(COMPLETELY_CONTAINS)某点的面的属性值赋为该点的属性值. 其中定义用于匹配行的条件.匹配选项包括: 相交—如果连接要素与 ...