题目大意

5000留念
现在有一副若干条边的二分图,左边有 N N个点 ,右边有MM个点 ,每个点有权值。一个图的子图定义为他端点的子集。一个合法的子图满足以下两个条件:

  1. 选出的点权和大于等于限制t
  2. 并且可以从图中选出若干条边,使得二分图中每个点最多被一条边覆盖,而选出的点要恰好被一条边覆盖。

求有多少个满足条件的子图。

Data Constraint
n,m≤20 n,m\leq20

题解

这题要用到霍尔定理。


Hall定理

简单讲一下我个人的理解。
对于一个二分图具备完备匹配的充要条件是对于左边点的每一个子集,和子集内的点相连的点集大小大于等于子集大小。


假如说只选出一遍的点的子集,我们显然可以Hall定理判断。实际上两边如果都满足,那么这个结论还是成立的。
所以我们只需要分别找出两边合法的方案,然后two pointers扫一下就解决了。

时间复杂度: O(2n∗n) O(2^n*n)

SRC

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std ;#define N 40 + 10
#define M 2000000 + 10
typedef long long ll ;bool f[2][M] ;
ll Rec1[M] , Rec2[M] ;
int W[N] , G[2][N] , Num[M] ;
int n , on , m , T , Size ;
ll ans ;void link1( int u , int v ) {G[0][u] |= 1 << (v - 1) ;
}void link2( int u , int v ) {G[1][u] |= 1 << (v - 1) ;
}int Count( int s ) {int ret = 0 ;while ( s ) {ret ++ ;s -= s & (-s) ;}return ret ;
}void Solve( int n , int t ) {for (int s = 0 ; s < (1 << n) ; s ++ ) {f[t][s] = 1 ;int st = 0 ;ll sum = 0 ;for (int i = 1 ; i <= n ; i ++ ) {if ( (s >> (i - 1)) & 1 ) {int _s = s ^ (1 << (i - 1)) ;if ( !f[t][_s] ) { f[t][s] = 0 ; break ; }st |= G[t][i] ;sum += W[t*on+i] ;}}if ( Num[st] < Num[s] ) f[t][s] = 0 ;if ( f[t][s] ) {if ( t == 0 ) Rec1[++Rec1[0]] = sum ;else Rec2[++Rec2[0]] = sum ;}}
}int main() {freopen( "guard.in" , "r" , stdin ) ;freopen( "guard.out" , "w" , stdout ) ;scanf( "%d%d" , &n , &m ) ;for (int i = 1 ; i <= n ; i ++ ) {scanf( "\n" ) ;for (int j = 1 ; j <= m ; j ++ ) {char c ;scanf( "%c" , &c ) ;if ( c == '1' ) link1( i , j ) , link2( j , i ) ;}}for (int i = 1 ; i <= n ; i ++ ) scanf( "%d" , &W[i] ) ;for (int i = 1 ; i <= m ; i ++ ) scanf( "%d" , &W[n+i] ) ;scanf( "%d" , &T ) ;for (int s = 0 ; s < (1 << max(n,m)) ; s ++ ) Num[s] = Count(s) ;on = n ;Solve( n , 0 ) ;Solve( m , 1 ) ;sort( Rec1 + 1 , Rec1 + Rec1[0] + 1 ) ;sort( Rec2 + 1 , Rec2 + Rec2[0] + 1 ) ;int j = Rec2[0] + 1 ;for (int i = 1 ; i <= Rec1[0] ; i ++ ) {while ( j > 1 && Rec2[j-1] + Rec1[i] >= T ) j -- ;if ( Rec2[j] + Rec1[i] >= T ) ans += Rec2[0] - j + 1 ;}printf( "%lld\n" , ans ) ;return 0 ;
}

以上.

JZOJ5000. 保镖相关推荐

  1. 从大门看守到贴身保镖服务的安全纵深防御

    当前各种网络威胁层出不穷,企业的网络安全重要性日益凸显,互联网环境下,万物互联成为大势.传统的网络边界防御已经不足以应对多变复杂的网络环境,安全攻击的不确定性和持续性,让越来越多的企业单位认识到,即使 ...

  2. 保镖机器人作文_我的保镖作文500字

    我的保镖作文500字 我曾有一朋友,名叫潘超.他块头不大,但手疾眼快,一张脸黝黑,看起来憨厚老实,可他却是一个满腹心计的人.他还有一个特殊的职位,就是我呼之即来,挥之即去的贴身保镖. 一个星期天下午, ...

  3. Groovy 设计模式 -- 保镖模式

    Bouncer Pattern http://groovy-lang.org/design-patterns.html#_bouncer_pattern 保镖模式主要负责对函数的输入参数的合法性检查, ...

  4. 保镖机器人作文_我的小保镖作文500字

    我姥姥家的小黑狗肥嘟嘟的,走起路来像模特一样.它的耳朵可会变魔术呢!厉害时耳朵就会竖起来:每次我走的时候,它的耳朵就会垂下来,看上去很不高兴的样子.它的眼睛像两颗黑色的宝石:鼻子可灵了,只要闻到香味就 ...

  5. Atitit 通过调用gui接口杀掉360杀毒 360卫士  qq保镖等难以结束的进程(javac# php )...

    Atitit 通过调用gui接口杀掉360杀毒 360卫士  qq保镖等难以结束的进程(javac# php ) 1.1. 这些流氓软件使用操作系统os提供的普通api根本就杀不掉啊1 1.2. 使用 ...

  6. 保镖机器人作文_关于机器人作文400字

    [第1篇] "爱闯祸"的机器人 世纪科技发达,人类发明出了机器人,我也赶时髦,买了一个.可是,这是一个"爱闯祸"的机器人. 我的学校正在举行科技展览会,科学老师 ...

  7. “道德”,究竟是保镖还是杀手?

                    "道德",究竟是保镖还是杀手?   在文章事件的全民大批判的过程中,我们能确定的就是一种感受:无力感.我们无论哀叹世风日下,痛恨男人劣根,还是鄙视& ...

  8. 少马爷改编《大保镖》的一点体会【ZZ】

    linked from http://www.xiangsheng.org/asp/html/2002/04/20020430230000-1.htm '我们老爷子在传统相声上他绝不率由旧章,他不是刻 ...

  9. bodyguard 保镖 护卫队 有关能力

    bodyguard 保镖 护卫队 The Premier's bodguard was waiting there. 首相的护卫人在那里等着. premier  ---首相 总理 [英音:['prem ...

最新文章

  1. Android Custom View系列《圆形菜单一》
  2. UA MATH566 统计理论2 点估计基础
  3. 【华为云技术分享】【DevCloud · 敏捷智库】如何避免重要需求遗漏?
  4. python 两个列表相互映射_零基础同学,一看就会的Python字典操作指南
  5. grunt + compass
  6. 两种方案实现word转pdf
  7. J1939入门(一)
  8. T410s主板上的黑色塑料是散热问题的祸首
  9. 计算机基础考试大一计算题,计算机基础复习(大一)计算机基础上机题库
  10. ipersistfile save 失败 错误代码“0x80070005” 拒绝访问的解决办法
  11. “瘦”AP和“胖”AP的区别
  12. 使用QRencode 生成个人微信二维码,欢迎大家来微信和我做朋友
  13. 软件测试之客户端(Client)测试
  14. Oracle (temporary tablespace)临时表空间说明
  15. dcos -1.7 都有哪些服务
  16. 电力系统机组调度 考虑了源荷不确定性 考虑源荷两侧不确定性的含风电的低碳调度,引入模糊机会约束,程序包括储能、风光、火电机组及水电机组
  17. 红黑树 之 原理和算法详细介绍
  18. Session | web应用的session机制、session的实现原理
  19. 阿里企业邮箱526 Authentication failure
  20. 糖基化(glycosylation)

热门文章

  1. ejs模板html,Ejs 模板引擎的有限使用
  2. Centos 7.6 Strongswan的搭建及使用
  3. Vue 3 迁移策略笔记—— 第22节:Slots 的统一
  4. 高斯噪音 matlab,如何给图像添加高斯噪声(MATLAB)
  5. 工业软件现场边界值测试,软件测试技术黑盒测试边界值法.ppt
  6. el-tabe单元格合并
  7. 深度强化学习-基于价值学习的高级技巧(五-1)
  8. POI excel下载 中文名 浏览器兼容解决
  9. jquery 绘图工具 flot 学习笔记
  10. 跟着我学 AI丨“Hey,Siri”的前生今世