YBTOJ:幻灯片(二分图匹配)
文章目录
- 题目描述
- 数据范围
- 解析
- 解析
题目描述
有一堆透明的幻灯片堆叠在一起,每个幻灯片上的随机一个位置会有幻灯片的标号。
因为幻灯片是透明的,所以堆叠在一起的幻灯片使得这些标号分不清各自对应的幻灯片。
现在要求你求出那些能够确定对应关系的幻灯片以及对应的标号。
数据范围
n<=26n<=26n<=26
解析
面对这样的数据范围,我还是不够暴力…
关键的思路就是暴力枚举每一条边,判断删掉这条边之后是否仍是完美匹配
解析
#include<bits/stdc++.h>
using namespace std;
const int N=65;
#define ll long long
ll read(){ll x=0,f=1;char c=getchar();while(!isdigit(c)){if(c=='-')f=-1;c=getchar();};while(isdigit(c)){x=x*10+c-'0';c=getchar();};return x*f;
}
int n,m;
struct node{int from,to,nxt;
}p[N*N*2];
int fi[N],cnt=-1;
void addline(int x,int y){p[++cnt]=(node){x,y,fi[x]};fi[x]=cnt;
}
int a[N],b[N],c[N],d[N],x[N],y[N];
bool in(int x,int y,int i){//printf("x=%d y=%d i=%d %d %d %d %d\n",x,y,i,a[i],b[i],c[i],d[i]);//printf(" %d %d %d %d\n",x>=a[i],x<=b[i],y>=c[i],y<=d[i]);return x>=a[i]&&x<=b[i]&&y>=c[i]&&y<=d[i];
}
int E;
int vis[N],mat[N],num,ans[N];
bool dfs(int x,int tim){if(vis[x]==tim) return false;vis[x]=tim;for(int i=fi[x];~i;i=p[i].nxt){if(i==E) continue;int to=p[i].to;if(!mat[to]||dfs(mat[to],tim)){mat[to]=x;return true;}}return false;
}
int hangary(){int res=0;memset(vis,0,sizeof(vis));memset(mat,0,sizeof(vis));for(int i=1;i<=n;i++){if(dfs(i,i)) res++;}return res;
}
int main(){int o=0;while(scanf("%d",&n)!=EOF){if(!n) break;memset(fi,-1,sizeof(fi));cnt=-1;num=0;memset(ans,0,sizeof(ans));for(int i=1;i<=n;i++){a[i]=read();b[i]=read();c[i]=read();d[i]=read();}for(int i=1;i<=n;i++){x[i]=read();y[i]=read();for(int j=1;j<=n;j++){if(in(x[i],y[i],j)){addline(j,i+n);}}}for(int i=0;i<=cnt;i++){E=i;if(hangary()!=n){num++;ans[p[i].from]=p[i].to-n;}}printf("Heap %d\n",++o);if(!num) printf("none\n");else{for(int i=1;i<=n;i++){if(ans[i]) printf("(%c,%d) ",'A'+i-1,ans[i]);}printf("\n");}printf("\n");}return 0;
}
/*
*/
YBTOJ:幻灯片(二分图匹配)相关推荐
- YbtOJ#573-后缀表达【二分图匹配】
正题 题目链接:https://www.ybtoj.com.cn/contest/115/problem/2 题目大意 给出一个包含字母变量和若干种同级操作符的后缀表达式.求一个等价的表达式满足该表达 ...
- Dinic二分图匹配 || Luogu P3386
题面:[模板]二分图匹配 思路:Dinic实现二分图匹配,要建一个超级源点(S)和超级汇点(T),分别定为N+M+1和N+M+2 然后S去和N中的数建正边和反边,正边权值为1,反边权值为0:M中的数去 ...
- 二分图匹配匈牙利算法DFS实现
1 /*==================================================*\ 2 | 二分图匹配(匈牙利算法DFS 实现) 3 | INIT: g[][]邻接矩阵; ...
- poj1274(二分图匹配)
(一道基础的二分图匹配) 题目意思大概为N个牛和M个栅栏,一个牛和一个栅栏只能匹配一次,求最大匹配 直接套用二分图最大匹配模板即可 #include <iostream> #include ...
- poj2724(二分图匹配)
题目大概意思为有部分奶酪需要处理,若两个奶酪的二进制只有一位不同,则可以一起处理,问最少需要处理几次 题目思路: 将可以一起处理的两个奶酪用边连接在一起,相当于边只连接二进制中有偶数个1的奶酪和二进制 ...
- 算法模板——二分图匹配
实现功能为二分图匹配 原理:匈牙利算法,核心思想--匹配上了就配,没直接匹配上也要通过前面的腾出位置让这个匹配上(详见:趣写算法系列之--匈牙利算法) 本程序以Codevs2776为例 详见Codev ...
- 算法:ACM二分图匹配 HDU2063
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=2063 摘录于互联网,原创作者redraiment,很详细的二分图匹配入门资料! 2063 过山车 Pr ...
- BZOJ1433 [ZJOI2009]假期的宿舍 - 二分图匹配
题解 一道裸的二分图匹配,稍微有一点细节需要注意, 但是非常裸= = 本校并且住校的向自己的床和 自己认识的并且本校的人的床连边 离校的不需要向外连边 不是本校的就和自己认识的 并且是本校的人的床连边 ...
- POJ2536 二分图匹配
题意: 有n只老鼠,m个洞,每个洞最多可以藏一只老鼠,每个老鼠的移动速度都是v,给你他们的当前坐标,和洞的坐标,突然老鹰来了,他们必须在s秒内跑到一个洞藏起来,问你最少有多少只老鼠被抓走了. ...
- URAL 1721 Two Sides of the Same Coin(二分图匹配,输出匹配对象)
题意:给出n个人的信息,名字.特征.排名. 在排名相差2的前提下,特征为testdata可以与特征为statements的组队,特征为anything可以任何一人组队: 求最多匹配对数,并将每队名字输 ...
最新文章
- HDU4009(最小树形图)
- 如何用你最熟悉的 SQL 来查询 Elasticsearch 中的数据?
- FileReader (三) - 网页拖拽并预显示图片简单实现
- Swift之深入解析“泛型”的底层原理
- IOS开发之MD5加密和钥匙串的使用-oc
- 【报告分享】见实私域流量白皮书:私域流量案例实操手册.pdf
- 华景机器人怎么控制_【扫地机器人选购】支持华为hilink智能家居联动/支持华为小艺语音控制的扫地机器人...
- python二进制解码_使用python3对二进制数据进行编码和解码,以将其包含到JSON中...
- 掌握这几个 Java 性能调优技巧,95%的面试必问的Java性能调优知识点,
- windows scrip host报错代码:800A00D
- 视频教程-项目经理俱乐部-项目实战.职场求生.敏捷.企业管理-敏捷开发
- 【折半查找二叉判定树】
- 瓜娃系列 (6) - ComparisonChain和primitives包
- 浅谈大数据平台架构设计
- 8.4 内存映射文件
- Android中的Menu功能菜单-OptionsMenu[选项菜单]
- labview事件结构的使用
- GemBox.Pdf v15Crack
- 日语 N5 知识点 - 何为五段动词
- Python 验证Mac地址
热门文章
- java注解 sql_mybatis中注解映射SQL示例代码
- java hdms_字段为clob类型,无法插入数据
- vst3插件_Steinberg发布新的VST 3.7 SDK,音乐软件开发者速来围观
- 软件构造学习笔记-第九周、第十周
- 软件构造学习笔记-第四周
- 还不会ts?一文带你打开ts的大门
- 『软件工程9』结构化系统分析——解决软件“做什么”问题
- 计算机软件在矿井地质中的应用,(完整版)遥感导论知识点整理(梅安新版)
- [Redis6]NoSQL数据库简介_特点
- C++,Java编程空指针的一个小细节