POJ 1486 Sorting Slides【二分图匹配】
题目大意:有n张幻灯片和n个数字,幻灯片放置有重叠,每个数字隶属于一个幻灯片,现在问你能够确定多少数字一定属于某个幻灯片
思路:上次刷过二分图的必须点后这题思路就显然了 做一次二分匹配后将当前匹配的边删除,再做一次二分匹配,如果能匹配到那么说明这条边不是必须边
顺便说下 删边以后不用从头开始二分匹配,而是在原来二分匹配的基础上对这个点进行增广就行,另外这题格式需要注意,很容易PE
#include<cstdio>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<math.h>
#define maxn 10000
#define MOD 1000000007
using namespace std;
int head[maxn],next[maxn],point[maxn],now;
int match[maxn],x1[maxn],x2[maxn],y11[maxn];
int y2[maxn],an[maxn],cop[maxn],ann[maxn];
int rematch[maxn],ans[maxn];
bool visit[maxn];
void add(int x,int y)
{
next[++now]=head[x];
head[x]=now;
point[now]=y;
}
int dfs(int k,int forbid)
{
for(int i=head[k];i;i=next[i])if(!visit[point[i]])
if(i!=forbid)
{
int u=point[i];
visit[u]=1;
if(match[u]==-1||dfs(match[u],forbid))
{
match[u]=k;
an[k]=i;
return 1;
}
}
return 0;
}
int main()
{
int n,x,y,cas=0;
while(1)
{
now=0;
memset(head,0,sizeof(head));
memset(ans,0,sizeof(ans));
scanf("%d",&n);
if(n==0)break;
for(int i=1;i<=n;i++)
scanf("%d%d%d%d",&x1[i],&x2[i],&y11[i],&y2[i]);
for(int i=1;i<=n;i++)
{
scanf("%d%d",&x,&y);
for(int j=1;j<=n;j++)
if(x1[j]<=x&&x<=x2[j]&&y11[j]<=y&&y<=y2[j])
{
add(i,j);
//printf("%d %d\n",i,j);
}
}
memset(match,-1,sizeof(match));
memset(an,-1,sizeof(an));
for(int i=1;i<=n;i++)
{
memset(visit,0,sizeof(visit));
dfs(i,-1);
}
//for(int i=1;i<=n;i++)printf("%d ",match[i]);
for(int i=1;i<=n;i++)rematch[match[i]]=i;
memcpy(cop,match,sizeof(match));
memcpy(ann,an,sizeof(an));
for(int i=1;i<=n;i++)
{
memset(visit,0,sizeof(visit));
match[rematch[i]]=-1;
if(!dfs(i,an[i]))ans[rematch[i]]=i;else ans[rematch[i]]=-1;
memcpy(an,ann,sizeof(an));
memcpy(match,cop,sizeof(match));
}
printf("Heap %d\n",++cas);
int flag=0,last=-1;
for(int i=1;i<=n;i++)
{
if(ans[i]!=-1)last=i;
}
for(int i=1;i<=n;i++)if(ans[i]!=-1 && i!=last)
{
flag=1;
printf("(%c,%d) ",(char)(i-1+'A'),ans[i]);
}
if(last!=-1)printf("(%c,%d)\n",(char)(last-1+'A'),ans[last]);
else printf("none\n");
printf("\n");
}
return 0;
}
POJ 1486 Sorting Slides【二分图匹配】的更多相关文章
- poj 1486 Sorting Slides(二分图匹配的查找应用)
Description Professor Clumsey is going to give an important talk this afternoon. Unfortunately, he i ...
- POJ 1486 Sorting Slides (二分图关键匹配边)
题意 给你n个幻灯片,每个幻灯片有个数字编号1~n,现在给每个幻灯片用A~Z进行编号,在该幻灯片范围内的数字都可能是该幻灯片的数字编号.问有多少个幻灯片的数字和字母确定的. 思路 确定幻灯片的数字就是 ...
- POJ 1486 Sorting Slides(二分图完全匹配必须边)题解
题意:给你n张照片的范围,n个点的坐标,问你能唯一确定那几个点属于那几张照片,例如样例中4唯一属于A,2唯一属于C,1唯一属于B,3唯一属于C 思路:进行二分图完全匹配,怎么判断唯一属于?匹配完之后删 ...
- POJ 1486 Sorting Slides (KM)
Sorting Slides Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 2831 Accepted: 1076 De ...
- poj 1486 Sorting Slides
Sorting Slides Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 4469 Accepted: 1766 De ...
- POJ 1486 Sorting Slides(二分图匹配)
[题目链接] http://poj.org/problem?id=1486 [题目大意] 给出每张幻灯片的上下左右坐标,每张幻灯片的页码一定标在这张幻灯片上, 现在问你有没有办法唯一鉴别出一些幻灯片 ...
- POJ 1486 Sorting Slides(寻找必须边)
题意:找出幻灯片与编号唯一对应的情况 思路: 1:求最大匹配,若小于n,则答案为none,否则转2 (不过我代码没有事先判断一开始的最大匹配数是否<n,但这样也过了,估计给的数据最大匹配数一定为 ...
- POJ 3057 Evacuation(二分图匹配+BFS)
[题目链接] http://poj.org/problem?id=3057 [题目大意] 给出一个迷宫,D表示门,.表示人,X表示不可通行, 每个门每时间单位只允许一个人通过, 每个人移动一格的为一时 ...
- POJ 3041 Asteroids (二分图匹配)
[题目链接] http://poj.org/problem?id=3041 [题目大意] 一个棋盘上放着一些棋子 每次操作可以拿走一行上所有的棋子或者一列上所有的棋子 问几次操作可以拿完所有的棋子 [ ...
随机推荐
- spring boot 的redis 之初理解
项目到末尾了快, 这几天安排我结合业务场景给项目加上redis 缓存, 我接到这个任务也是懵逼了一会儿: 问了一句让我自己先想办法,没办法硬着头皮查吧, 要不不得不说spring boot 还是好用, ...
- iOS 根据屏幕宽度, 高度判断手机设备
#define iPhone_5 [UIScreen mainScreen].bounds.size.width == 320.0 #define iPhone_6 [UIScreen mainScr ...
- 如何使用xftp工具在Windows与Linux之间传输文件
如何使用xftp工具在Windows与Linux之间传输文件 整理者:vashon 声明:感谢开源社区 xftp工具是一款SFTP,FTP文件传输软件,可在Windows pc与Unix/Linux之 ...
- Python100天打卡-Day10-图形用户界面和游戏开发
基于tkinter模块的GUIPython默认的GUI开发模块是tkinter(在Python 3以前的版本中名为Tkinter)使用tkinter来开发GUI应用需要以下5个步骤: 导入tkinte ...
- Python3简明教程(一)—— 开始Python之旅
第一个Python程序 作为我们第一个Python程序——打印"Hello World!". 在终端输入Python3进入交互界面: 输入print("Hello W ...
- axios 里面 then 默认写的function里面没有this,改成箭头函数后就可以用this了
,methods:{ loadJson:function(){ //this.jsonTest = "jjj" this.$http.get('http://localhost:3 ...
- 获取声音设备名称及PNPDeviceID
实现效果: 知识运用: WMI管理类中的 ManagementObjectSearcher类 //基于指定的查询检索管理对象的集合 用于检索管理信息的较为常用的入口点之一 public Managem ...
- QT +菜单栏和工具栏
#include "mainwindow.h" #include <QMenuBar>//菜单栏需要的头文件 #include <QMenu>//菜单 #i ...
- C++构造函数(复制构造函数)、析构函数
注:若类中没有显示的写如下函数,编译会自动生成:默认复制构造函数.默认赋值构造函数(浅拷贝).默认=运算符重载函数(浅拷贝).析构函数: 1.默认构造函数(默认值)构造函数的作用:初始化对象的数据成员 ...
- ios NSRange
Objective-C中判断字符串是否包含其他字符串 -(BOOL) hasPrefix:(NSString *) astring;检查字符串是否以astring开头:-(BOOL) hasSuffi ...