POJ 1486 Sorting Slides(寻找必须边)
题意:找出幻灯片与编号唯一对应的情况
思路: 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(寻找必须边)的更多相关文章
- 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 (二分图关键匹配边)
题意 给你n个幻灯片,每个幻灯片有个数字编号1~n,现在给每个幻灯片用A~Z进行编号,在该幻灯片范围内的数字都可能是该幻灯片的数字编号.问有多少个幻灯片的数字和字母确定的. 思路 确定幻灯片的数字就是 ...
- poj 1486 Sorting Slides(二分图匹配的查找应用)
Description Professor Clumsey is going to give an important talk this afternoon. Unfortunately, he i ...
- POJ 1486 Sorting Slides(二分图完全匹配必须边)题解
题意:给你n张照片的范围,n个点的坐标,问你能唯一确定那几个点属于那几张照片,例如样例中4唯一属于A,2唯一属于C,1唯一属于B,3唯一属于C 思路:进行二分图完全匹配,怎么判断唯一属于?匹配完之后删 ...
- POJ 1486 Sorting Slides【二分图匹配】
题目大意:有n张幻灯片和n个数字,幻灯片放置有重叠,每个数字隶属于一个幻灯片,现在问你能够确定多少数字一定属于某个幻灯片 思路:上次刷过二分图的必须点后这题思路就显然了 做一次二分匹配后将当前匹配的边 ...
- 【POJ】1486:Sorting Slides【二分图关键边判定】
Sorting Slides Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 5390 Accepted: 2095 De ...
- ACM: poj 1094 Sorting It All Out - 拓扑排序
poj 1094 Sorting It All Out Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%lld & ...
随机推荐
- 去掉影响效率的where 1=1
最近看了篇文章,觉得挺有道理.实际项目中,我们进行sql条件过滤,我们不能确定是不是有条件.也不能确定条件的个数.大多数人会先把sql语句组装为: 这样,如果有其他过滤条件直接加上“and 其他条件” ...
- Android App测试要点
本文主要内容,转载自 http://www.51testing.com/html/04/344504-849373.html, 在这里,主要是整理一下app测试的总体思路,这里的a ...
- ubuntu设置关闭屏幕和锁定
见链接:http://askubuntu.com/questions/177348/how-do-i-disable-the-screensaver-lock If you want to wrap ...
- 已成功与服务器建立连接,但是在登录前的握手期间发生错误。 (provider: SSL Provider, error: 0 - 等待的操作过时)
今天忽然间发现远程连接别人数据库会出现 已成功与服务器建立连接,但是在登录前的握手期间发生错误. (provider: SSL Provider, error: 0 - 等待的操作过时) 这种情况 ...
- Hadoop上路-04_HBase0.98.0入门
以下操作在Hadoop分布式集群基础上进行. 一.分布式环境搭建 下载:)验证 3)修改%HBASE%/conf/hbase-env.sh 4)修改$HBASE_HOME/conf/hbase-sit ...
- easyui获取一行数据和修改data-options的值
<table id="tab" class="easyui-datagrid" style="width: 100%; height: 500p ...
- eclipse增加浏览器chrome
1.安装完了google chrome游览器后,如何让eclipse直接用chrome打开jsp 2.添加到eclipse环境中即可, Window(菜单) -- preferences 增加成功后, ...
- MySQL 库大小、表大小、索引大小查询命令
1.进去指定schema 数据库(存放了其他的数据库的信息) mysql> use information_schema; 2.查询所有数据的大小 mysql> sele ...
- 从零开始学ios开发(六):IOS控件(3),Segmented Control、Switch
这次的学习还是基于上一个项目继续进行(你也可以新建一个项目)学习Segmented Control和Switch. Segmented Control Switch Segmented Control ...
- IOS开发一些资源收集
从别的地方看到的,多谢作者,现贴在这里备忘. 在线教程 iOS技术概述 我个人感觉这是开始iOS开发第一步,了解一下iOS整体的结构,有哪些支持类库.如何使用类库等等一切基础的概念性指示 iPh ...