BZOJ 1433 Luogu P2055 [ZJOI2009]假期的宿舍 匈牙利算法
刚学了匈牙利正好练练手(我不会说一开始我写错了)(怕不是寒假就讲了可是我不会)
把人看做左部点,床看作右部点
建图:(!!在校相当于有床,不在校相当于没有床 但是要来学校)
1.在校的 不走的人 自己和自己的床连边;
2.不在校的人或在校不回家的人 和 认识的 并且 在校的人 的床 连边;
于是统计一下需要几张床,再跑匈牙利算法、、、看看够不够。
#include<cstdio> #include<iostream> #include<cstring> #define R register int using namespace std; inline int g() {R ret=0; register char ch; while(!isdigit(ch=getchar()));do ret=ret*10+(ch^48); while(isdigit(ch=getchar())); return ret; } int t,n,cnt,ans,tot; int vr[10010],nxt[10010],fir[101],pre[101]; inline void add(int u,int v) {vr[++cnt]=v,nxt[cnt]=fir[u],fir[u]=cnt;} bool vis[101],h[101],s[101]; bool dfs(int u) {for(R i=fir[u];i;i=nxt[i]) {R v=vr[i];if(vis[v]) continue; vis[v]=true;if(!pre[v]||dfs(pre[v])) {pre[v]=u; return true;}} return false; } signed main() {t=g();while(t--) { cnt=tot=ans=0;memset(pre,0,sizeof(pre)),memset(fir,0,sizeof(fir)),memset(nxt,0,sizeof(nxt)),memset(vr,0,sizeof(vr));n=g(); for(R i=1;i<=n;++i) s[i]=g();for(R i=1;i<=n;++i) {h[i]=g(); if(!h[i]&&s[i]) add(i,i+n),add(i+n,i);}for(R i=1;i<=n;++i) for(R j=1,x;j<=n;++j) {x=g(); if(x&&i!=j) {if(s[j]&&((s[i]&&!h[i])||!s[i])) add(i,j+n),add(j+n,i);if(s[i]&&((s[j]&&!h[j])||!s[j])) add(j,i+n),add(i+n,j);}}for(R i=1;i<=n;++i) if(!s[i]||(s[i]&&!h[i])) ++tot;for(R i=1;i<=n;++i) if(!s[i]||(s[i]&&!h[i])) {memset(vis,0,sizeof(vis)); ans+=dfs(i);} ans==tot?printf("^_^\n"):printf("T_T\n");} }
然而有种更厉害的建图,但是我不会。。。哪位大佬给讲讲QAQ,如下:
#include<cstdio> #include<iostream> #include<cstring> #define R register int using namespace std; inline int g() {R ret=0; register char ch; while(!isdigit(ch=getchar()));do ret=ret*10+(ch^48); while(isdigit(ch=getchar())); return ret; } int t,n,cnt,ans,tot; int vr[2510],nxt[2510],fir[51],pre[51]; inline void add(int u,int v) {vr[++cnt]=v,nxt[cnt]=fir[u],fir[u]=cnt;} bool vis[51],h[51],s[51]; bool dfs(int u) {for(R i=fir[u];i;i=nxt[i]) {R v=vr[i];if(vis[v]) continue; vis[v]=true;if(!pre[v]||dfs(pre[v])) {pre[v]=u; return true;}} return false; } signed main() {t=g();while(t--) { cnt=tot=ans=0;memset(pre,0,sizeof(pre)),memset(fir,0,sizeof(fir)),memset(nxt,0,sizeof(nxt)),memset(vr,0,sizeof(vr));n=g(); for(R i=1;i<=n;++i) s[i]=g();for(R i=1;i<=n;++i) {h[i]=g(); if(!h[i]&&s[i]) add(i,i);}for(R i=1;i<=n;++i) for(R j=1,x;j<=n;++j) {x=g(); if(x&&s[j]) add(i,j);}for(R i=1;i<=n;++i) if(!s[i]||(s[i]&&!h[i])) ++tot;for(R i=1;i<=n;++i) if(!s[i]||(s[i]&&!h[i])) {memset(vis,0,sizeof(vis)); ans+=dfs(i);} ans==tot?printf("^_^\n"):printf("T_T\n");} }
2019.04.14
转载于:https://www.cnblogs.com/Jackpei/p/10707186.html
BZOJ 1433 Luogu P2055 [ZJOI2009]假期的宿舍 匈牙利算法相关推荐
- Luogu P2055 [ZJOI2009]假期的宿舍
这个建图真玄.jpg 简直是常识题 然而我常识不足QwQ 话说题解里的代码在我看来不美观所以抄不了题解 于是debug一个小时QwQ 给萌新一点活路吧 #include<cstdio> # ...
- 二分图 洛谷P2055 [ZJOI2009]假期的宿舍
[ZJOI2009]假期的宿舍 题目描述 学校放假了 · · · · · · 有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题.比如 A 和 B 都是学校的学生,A 要回家,而 ...
- 洛谷P2055 [ZJOI2009]假期的宿舍 题解
题目链接: https://www.luogu.org/problemnew/show/P2055 分析: 这道题比较简单,二分图的练习题(当然最大流同理). 易得我们可以将人放在一侧,床放在一侧. ...
- P2055 [ZJOI2009]假期的宿舍
有点烧脑... 这道题是求二分图完美匹配.没看请题意还不知道是求完美匹配,结果爆零. 人一共分三种: 在校学生 && 回家.这类人拥有一个床,但是不睡. 在校学生 && ...
- P2055 [ZJOI2009]假期的宿舍(二分图匹配)
题目描述 学校放假了 · · · · · · 有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题. 比如 A 和 B 都是学校的学生,A 要回家,而 C 来看B,C 与 A 不认识 ...
- BZOJ1433 ZJOI2009 假期的宿舍 二分图匹配
1433: [ZJOI2009]假期的宿舍 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2375 Solved: 1005 [Submit][S ...
- 【BZOJ 1433】[ZJOI2009]假期的宿舍
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 把每个人都分为左边和右边两个人 xi,yi 如果第i个人不回家或者是外校学生 那么它可以和他认识的人连一条容量为1的边(前提是这个认 ...
- 1433. [ZJOI2009]假期的宿舍【二分图】
Description 学校放假了······有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题.比如A 和B都是学校的学生,A要回家,而C来看B,C与A不认识.我们假设每个人只能 ...
- [ZJOI2009]假期的宿舍
https://www.luogu.org/problemnew/show/P2055 https://www.lydsy.com/JudgeOnline/problem.php?id=1433 题解 ...
最新文章
- mac 黑窗口连接mysql_Mac下安装配置MySQL
- llinux的shell脚本编程详解
- springboot页面乱码问题
- 5.1 入门整合案例(SpringBoot+Spring-data-elasticsearch) ---- good
- 宝塔linux面板假设nextcloud,宝塔面板部署NextCloud(14.0.3)逐一解决后台安全及设置警告...
- 怎么用java ee编程_Java EE应用程序入门 - 编程入门网
- Docker快速搭建Taiga敏捷开发项目管理平台
- Windows 7中打开IIS的远程访问
- linux内核内存映射实验报告,动手实践-Linux内存映射基础(上)
- java_day01
- php缩放gif和png图透明背景变成黑色的解决方法_php技巧
- Atitit nodejs js 获取图像分辨率 尺寸 大小 宽度 高度
- ElementUI简单分页
- 关于java调用Dll文件的异常 Native library (win32-x86-64/CtrlNPCDLL.dll) not found in resource pat...
- 暴力猴加脚本的适当应用
- 【论文笔记】基于聚类特征深度LSTM的语音情感识别
- python爬取大众点评字体_python采集大众点评(字体反爬)
- 简单C语言程序的编写,c语言编写简单程序.doc
- SpringAop实现原理
- 家庭局域网_分析 | 如何查询局域网内在用的IP地址?