当前位置: 首页 > news >正文

洛谷 2055 BZOJ 1433 [ZJOI2009]假期的宿舍

【题解】

  既然是一人对应一床,那么显然可以用二分图匹配来做。俩人认识的话,如果其中一个a是在校学生,另一个b不回家,b就可以向a的床连边(a,b当然也可以是同一个人)。

  然后如果最大匹配数大于等于需要床的人数,就存在合法方案。

  

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cstring> 
 4 #define N 100
 5 #define rg register
 6 using namespace std;
 7 int T,n,cnt,tot,time,ans,last[N],v[N],from[N];
 8 bool sch[N],gh[N];
 9 struct edge{
10     int to,pre;
11 }e[N*N];
12 inline int read(){
13     int k=0,f=1; char c=getchar();
14     while(c<'0'||c>'9')c=='-'&&(f=-1),c=getchar();
15     while('0'<=c&&c<='9')k=k*10+c-'0',c=getchar();
16     return k*f;
17 }
18 int dfs(int x){
19     for(rg int i=last[x],to;i;i=e[i].pre)if(v[to=e[i].to]!=time){
20         v[to]=time;
21         if(!from[to]||dfs(from[to])){
22             from[to]=x;
23             return 1;
24         }
25     }
26     return 0;
27 }
28 int main(){
29     T=read();
30     while(T--){
31         memset(v,0,sizeof(v));
32         memset(from,0,sizeof(from));
33         memset(last,0,sizeof(last));
34         ans=0; cnt=0; tot=0; time=0;
35         n=read();
36         for(rg int i=1;i<=n;i++) sch[i]=read();
37         for(rg int i=1;i<=n;i++){
38             int x=read();
39             if(sch[i]) if((gh[i]=x)==1) cnt++;else;
40             else gh[i]=0;
41         }
42         for(rg int i=1;i<=n;i++)
43         for(rg int j=1;j<=n;j++) if(read()==1||i==j){
44             if(sch[i]&&!gh[j]) e[++tot]=(edge){i,last[j]},last[j]=tot;
45             if(sch[j]&&!gh[i]) e[++tot]=(edge){j,last[i]},last[i]=tot;
46         }
47         for(rg int i=1;i<=n;i++) if(!gh[i])time++,ans+=dfs(i);
48         puts(ans>=n-cnt?"^_^":"T_T");
49     }
50     return 0;
51 }
View Code

 

转载于:https://www.cnblogs.com/DriverLao/p/8909892.html

相关文章:

  • UVA 10891 Game of Sum(区间DP(记忆化搜索))
  • Python学习4,字符串
  • BZOJ 3097: Hash Killer I
  • [转组第一天] | 调研XSS攻击
  • 2018年最新搜索引擎转跳JavaScript代码(竞价广告专用)
  • Java多线程实现的三种方式
  • 服务端渲染
  • 【转】数据库范式(1NF 2NF 3NF BCNF)
  • 父元素与子元素之间的margin-top问题(css hack)
  • 20180427积累
  • 关于sqoop --split-by 及 -m的理解
  • 20165301陈潭飞2017-2018-2 20165301 实验三《Java面向对象程序设计》实验报告
  • 往idea中导入已有的web项目
  • webpakc4.0移除了 CommonsChunkPlugin 组建
  • 判断Python输入是否为数字、字符(包括正则表达式)
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • Docker入门(二) - Dockerfile
  • JAVA多线程机制解析-volatilesynchronized
  • mysql 5.6 原生Online DDL解析
  • Redash本地开发环境搭建
  • SpingCloudBus整合RabbitMQ
  • Vue.js源码(2):初探List Rendering
  • yii2权限控制rbac之rule详细讲解
  • 浮现式设计
  • 经典排序算法及其 Java 实现
  • 深入浅出webpack学习(1)--核心概念
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 主流的CSS水平和垂直居中技术大全
  • 仓管云——企业云erp功能有哪些?
  • 国内开源镜像站点
  • 回归生活:清理微信公众号
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (C++17) optional的使用
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (新)网络工程师考点串讲与真题详解
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (转)项目管理杂谈-我所期望的新人
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .NET Core 和 .NET Framework 中的 MEF2
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .NET面试题(二)
  • /dev/sda2 is mounted; will not make a filesystem here!
  • @LoadBalanced 和 @RefreshScope 同时使用,负载均衡失效分析
  • @TableLogic注解说明,以及对增删改查的影响
  • @vue/cli 3.x+引入jQuery
  • [.net]官方水晶报表的使用以演示下载
  • [2018][note]用于超快偏振开关和动态光束分裂的all-optical有源THz超表——
  • [Android]How to use FFmpeg to decode Android f...
  • [BUUCTF 2018]Online Tool
  • [C/C++] -- 二叉树
  • [c]统计数字