题目大意:有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【二分图匹配】的更多相关文章

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

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

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

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

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

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

  4. POJ 1486 Sorting Slides (KM)

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

  5. poj 1486 Sorting Slides

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

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

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

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

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

  8. POJ 3057 Evacuation(二分图匹配+BFS)

    [题目链接] http://poj.org/problem?id=3057 [题目大意] 给出一个迷宫,D表示门,.表示人,X表示不可通行, 每个门每时间单位只允许一个人通过, 每个人移动一格的为一时 ...

  9. POJ 3041 Asteroids (二分图匹配)

    [题目链接] http://poj.org/problem?id=3041 [题目大意] 一个棋盘上放着一些棋子 每次操作可以拿走一行上所有的棋子或者一列上所有的棋子 问几次操作可以拿完所有的棋子 [ ...

随机推荐

  1. Spark MLlib编程API入门系列之特征提取之主成分分析(PCA)

    不多说,直接上干货! 主成分分析(Principal Component Analysis,PCA), 将多个变量通过线性变换以选出较少个数重要变量的一种多元统计分析方法. 参考 http://blo ...

  2. 各 Android 平台版本支持的 API 级别

    平台版本 API 级别 VERSION_CODE 备注 Android 7.0 24 N 平台亮点 Android 6.0 23 M 平台亮点 Android 5.1 22 LOLLIPOP_MR1 ...

  3. logging日志过滤和日志文件自动截取

    1.日志过滤 import logging class IgnoreFilter(logging.Filter): def filter(self,record): return "girl ...

  4. nodejs中相互引用(循环引用)的模块分析

    话不多少,直接上源码吧: modA.js: module.exports.test = 'A'; const modB = require('./05_modB'); console.log( 'mo ...

  5. java8的lambda表达式,将List<DTO> 转为 List<DO>

    将List<PhoneDTO>转为List<PhoneDO>,通过java8的lambda表达式来操作,比传统的for循环精简很多: /** * List<PhoneDT ...

  6. spring Existing transaction found for transaction marked with propagation 'never' 解决

    先在申明事务中配置了所有的事务 <!--配置事物传播策略,以及隔离级别--> <tx:advice id="txAdvice" transaction-manag ...

  7. 离开APM的弹性云还是真弹性吗

    准确来说应该叫脱离业务的弹性云或者容器都是伪弹性.之所以标题中有APM一是因为它近来热门,二是因为它在我将要说的这个事情上起到关键性的作用. 不管是亚马逊的弹性云.容器方案或者国内众多云厂商在自动伸缩 ...

  8. IOS状态栏

    IOS状态栏是什么地方? 它是IOS设备屏幕顶部显示信号以及电池的区域.状态栏默认的高度是20像素,状态栏在软件开发中有何作用?联网应用中可在自动帮用户下载数据时使用,推荐在状态栏中予以显示.状态栏可 ...

  9. 洛谷 P3038 [USACO11DEC]牧草种植Grass Planting

    题目描述 Farmer John has N barren pastures (2 <= N <= 100,000) connected by N-1 bidirectional road ...

  10. 数据库连接池proxool的两种使用方式

    数据库连接池可以通过两种方式来应用,针对web应用和非web应用而来. 非web应用的数据库连接池配置 第一种方式:工厂类 非web应用可以使用工厂模式将数据库连接创建封装在一个工具类中,工具类中又使 ...