好长时间没更博客了

因为实在太蒻了

这让本蒟蒻怎么办

今天终于遇到了一道模板题(之前也有,不过太蒻了都不会)

不过...写代码5分钟,调试2小时


分界线:回归正题

这个就是普通的匈牙利算法 差不多

思路:

我们需要统计出谁需要床,谁有床

我们的二分图就是 需要的人

跑匈牙利就好了

什么人不需要床?? 在校且回家的人

什么床能用?? 在校的人

由于人的序号和床的序号会重复

所以我在床的序号上加了m,(比如一共有3个人,一号床的"名字"就是4)

如果还不明白上面那句那就可以理解为#define 一号床 4

由于题目要求输入是邻接矩阵,所以我们可以只读入一半(左上角和右下角连线以左不读)

因为人的信任是相互的

对应好之后就可以了

做这道题,怎么做?

1 : 学会匈牙利算法,不管你用Google.Baidu.360.搜狗.bing.yandex......什么引擎(能用就行)

都有很生动的例子,这里不再赘述

2 : 学会图论基本知识,会用邻接表存边(只会邻接矩阵的话可以先学一学或者看懂我的之后自己写)

3 : 写代码,就是用你的小爪爪摸一下键盘

4 : debug,dalao自行跳过

5 : 最重要的一步:

打上神兽!!!!



       ┌─┐        ┌─┐
┌─┘ ┴────┘ ┴─┐
│ │
│ ─── │
│ ─┬┘ └┬─ │
│ │
│ ─┴─ │
│ │
└──┐ ┌──┘
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ └──────────┐
│ │
│ ├─┐
│ ┌─┘
│ │
└─┐ ┐ ┌────┬ ┐ ┌──┘
│─┤─┤ │─┤─┤
└─┴─┘ └─┴─┘
神兽保佑
代码无BUG!

看起来好像不大对,但是粘贴到记事本或sublime(Dev也行)

就会变成非常帅气的样子

现在贴代码

#include<bits/stdc++.h>

using namespace std;

inline int read(){int s=0,w=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();return s*w;}
inline void write(int x) {if(x<0) putchar('-'),x=-x; if(x>9) write(x/10); putchar(x%10+'0'); } int u[10001],v[10001],f[10001],N[10001],g[10001];
bool bj[10001],bj2[10001],book[10001]; void add(int x,int y,int z){//邻接表存边
u[z] = x; v[z] = y; N[z] = f[x]; f[x] = z;
} bool find(int x){//匈牙利模板
for(int i = f[x];i != -1;i = N[i]){
int p = v[i];
if(!book[p]){
book[p] = 1;
if(g[p] == 0 || find(g[p])){
g[p] = x;
return 1;
}
}
}
return 0;
} int main(int argc, char const *argv[])
{
int yy;
yy = read(); while(yy){
int tt = 0;
yy--;
memset(f,-1,sizeof f);//多测不清空,爆零两行泪
memset(u,0,sizeof u);
memset(v,0,sizeof v);
memset(g,0,sizeof g);
memset(bj,0,sizeof bj);
memset(bj2,0,sizeof bj2); int m,x,tot = 0;
m = read(); for(int i = 1;i <= m;++i) bj[i] = read();//在校标记 for(int i = 1;i <= m;++i) {
x = read();
bj2[i] = x;//是否回家的标记 if(!bj[i]) bj2[i] = 0;//不在校就可以当不回家处理(因为需要床)
if(bj2[i]) tt++;
} for(int i = 1;i <= m;++i){
for(int j = 1;j <= m;++j){
x = read();
if(i > j) continue;//只读一半 if(i == j && bj[i])//自己可以睡自己的床
x = 1;
if(x == 0) continue;//不能互相睡床不存边 if(bj[j] && !bj2[i]){//j有床i不回家就加边
// cout<<i<<" "<<j<<endl;
add(i,m + j,++tot);
} if(i == j) continue; if(bj[i] && !bj2[j]){//同理
// cout<<j<<" "<<i<<endl;
add(j,m + i,++tot);
}
}
} // for(int i = 1;i <= m;++i){
// cout<<f[i]<<" "<<N[i]<<endl;
// } int cnt = 0;
for(int i = 1;i <= m;++i){
memset(book,0,sizeof book);
if(find(i)) cnt++;
} if(cnt == m - tt) cout<<"^_^"<<"\n";
else cout<<"T_T"<<"\n";
}
return 0;
} /***
* ┌─┐ ┌─┐
* ┌─┘ ┴────┘ ┴─┐
* │ │
* │ ─── │
* │ ─┬┘ └┬─ │
* │ │
* │ ─┴─ │
* │ │
* └──┐ ┌──┘
* │ │
* │ │
* │ │
* │ │
* │ │
* │ │
* │ │
* │ └──────────┐
* │ │
* │ ├─┐
* │ ┌─┘
* │ │
* └─┐ ┐ ┌────┬ ┐ ┌──┘
* │─┤─┤ │─┤─┤
* └─┴─┘ └─┴─┘
* 神兽保佑
* 代码无BUG!
*/

洛谷 p2055 假期的宿舍 题解的更多相关文章

  1. 【二分图】洛谷P2055假期的宿舍

    题目描述 学校放假了 · · · · · · 有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题.比如 A 和 B 都是学校的学生,A 要回家,而 C 来看B,C 与 A 不认识. ...

  2. 洛谷 - P2055 - 假期的宿舍 - 最大流

    https://www.luogu.org/problemnew/show/P2055 这是一个错误的示范. 一开始觉得就找一条路从外校同学连到本校同学然后最终从周末回家的同学流出,每个人睡后一个人的 ...

  3. 洛谷P2055假期的宿舍

    题目 此题主要是考察二分图匹配,而二分图匹配最主要的就是建图,而图一般都是要分成两个部分来分,比如该题就需要先将在学校住的人和床连在一起,因为在学校住就会与一个床.然后每两个人之间假如他们相互认识就可 ...

  4. 洛谷P2756飞行员配对方案问题 P2055假期的宿舍【二分图匹配】题解+代码

    洛谷 P2756飞行员配对方案问题 P2055假期的宿舍[二分图匹配] 飞行员配对方案问题 题目背景 第二次世界大战时期.. 题目描述 英国皇家空军从沦陷国征募了大量外籍飞行员.由皇家空军派出的每一架 ...

  5. 洛谷 P2055 [ZJOI2009]假期的宿舍

    洛谷 P2055 题目描述 学校放假了 · · · · · · 有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题.比如 A 和 B 都是学校的学生,A 要回家,而 C 来看B,C ...

  6. 洛谷P1783 海滩防御 分析+题解代码

    洛谷P1783 海滩防御 分析+题解代码 题目描述: WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和 ...

  7. 洛谷P4047 [JSOI2010]部落划分题解

    洛谷P4047 [JSOI2010]部落划分题解 题目描述 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落 ...

  8. 洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈)

    洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1311990 原题地址:洛谷P1155 双栈排序 ...

  9. 洛谷 P2055 【假期的宿舍】

    题库 :洛谷 题号 :2055 题目 :假期的宿舍 link :https://www.luogu.org/problem/P2055 首先明确一下:校内的每个学生都有一张床(只是校内的有) 思路 : ...

随机推荐

  1. Laravel框架下路由的使用(源码解析)

    本篇文章给大家带来的内容是关于Laravel框架下路由的使用(源码解析),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 前言 我的解析文章并非深层次多领域的解析攻略.但是参考着开发文 ...

  2. R与金钱游戏:均线黄金交叉1

    双11临近的我发现自己真的很穷很穷很穷(重要的问题说三遍)-- 贫穷催人上进.于是我就寻思着在空闲时间自己捣鼓一下钱生钱的游戏是怎么玩的,毕竟就算注定做韭菜也要做一根有知识有理想的韭菜. 第一个要玩的 ...

  3. THUPC2019/CTS2019/APIO2019自闭记

    自闭了,自闭选手不配拥有游记.

  4. 【微信】微信小程序ISO上wx.scanCode BUG

    ================================================== BUG情况: 小程序在onLoad 主动调用wx.scanCode,安卓手机没有问题.iso调用失 ...

  5. thinkphp3.2.3集成phpexcel1.8导出设置单元格合并

    1 到这里下载classes里面的文件 https://github.com/PHPOffice/PHPExcel 2 然后放到 thinkphp的vendor 新建一个文件夹 Phpexcel  然 ...

  6. 小白开学Asp.Net Core 《八》

    小白开学Asp.Net Core <八> — — .Net Core 数据保护组件 1.背景 我在搞(https://github.com/AjuPrince/Aju.Carefree)这 ...

  7. 批量操作mysql数据库表

    SELECT CONCAT('truncate TABLE ',table_schema,'.',TABLE_NAME, ';') FROM INFORMATION_SCHEMA.TABLES WHE ...

  8. XSS相关Payload及Bypass的备忘录(上)

    翻译学习准备自用,同时分享给大家, 来自于: https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XSS%20Injecti ...

  9. 小程序自定义tabbar custom-tab-bar 6s出不来解决方案,cover-view不兼容

    1.从微信小程序的官网扣下来的demo,实际测试中,发现6s ios10 系统不兼容,里面的内容出不来 <cover-view class="tab-bar"> < ...

  10. Java 之 Vector 集合

    一.构造方法 Vector():构造一个空向量,使其内部数据数组的大小为 10,其标准容量增量为零. Vector(int initialCapacity) :使用指定的初始容量和等于零的容量增量构造 ...