vijos p1204——CoVH之柯南开锁

背景

随着时代的演进,困难的刑案也不断增加...
但真相只有一个
虽然变小了,头脑还是一样好,这就是名侦探柯南!

描述

[CoVH06]
面对OIBH组织的嚣张气焰, 柯南决定深入牛棚, 一探虚实.
他经过深思熟虑, 决定从OIBH组织大门进入...........

OIBH组织的大门有一个很神奇的锁.
锁是由M*N个格子组成, 其中某些格子凸起(灰色的格子). 每一次操作可以把某一行或某一列的格子给按下去.

如果柯南能在组织限定的次数内将所有格子都按下去, 那么他就能够进入总部. 但是OIBH组织不是吃素的, 他们的限定次数恰是最少次数.

请您帮助柯南计算出开给定的锁所需的最少次数.

格式

输入格式

第一行 两个不超过100的正整数N, M表示矩阵的长和宽
以下N行 每行M个数 非0即1 1为凸起方格

输出格式

一个整数 所需最少次数

样例1

样例输入1

4 4
0000
0101
0000
0100

样例输出1

2

限制

全部1秒

用到二分图,将x和y作为点集,求最大匹配即可。

代码几乎和poj P1274的牛栏一模一样。O(n³)

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<cmath>
 5 using namespace std;
 6 const int maxn=205;
 7 bool map[maxn][maxn];
 8 int n,m;
 9 bool vis[maxn];
10 int match[maxn];
11 inline bool dfs(int x)
12 {
13     for(int i=1;i<=m;i++)
14     {
15         if(map[x][i]&&!vis[i])
16         {
17             vis[i]=true;
18             if(match[i]==-1||dfs(match[i]))
19             {
20                 match[i]=x;
21                 return true;
22             }
23         }
24     }
25     return false;
26 }
27 inline void hungary()
28 {
29     int count=0;
30     for(int i=1;i<=n;i++)
31     {
32         memset(vis,false,sizeof(vis));
33         if(dfs(i))count++;
34     }
35     printf("%d",count);
36     return ;
37 }
38 inline void gg()
39 {
40     scanf("%d%d",&n,&m);
41     memset(map,false,sizeof(map));
42     memset(match,-1,sizeof(match));
43     for(int i=1;i<=n;i++)
44     {
45         for(int j=1;j<=m;j++)
46         {
47             int x=getchar();
48             while(x<‘0‘||x>‘9‘)x=getchar();
49             if(x==‘1‘)
50             map[i][j]=true;
51         }
52     }
53     hungary();
54     return ;
55 }
56 int main()
57 {
58     gg();
59     return 0;
60 }
时间: 2024-10-25 13:46:22

vijos p1204——CoVH之柯南开锁的相关文章

Vijos CoVH之柯南开锁 (二分图)

背景 随着时代的演进,困难的刑案也不断增加...但真相只有一个虽然变小了,头脑还是一样好,这就是名侦探柯南! 描述 [CoVH06]面对OIBH组织的嚣张气焰, 柯南决定深入牛棚, 一探虚实.他经过深思熟虑, 决定从OIBH组织大门进入........... OIBH组织的大门有一个很神奇的锁.锁是由M*N个格子组成, 其中某些格子凸起(灰色的格子). 每一次操作可以把某一行或某一列的格子给按下去.如果柯南能在组织限定的次数内将所有格子都按下去, 那么他就能够进入总部. 但是OIBH组织不是吃素

Vijos 1206 CoVH之再破难关 BFS与位运算

1.题意:一个由01组成的4*4的矩阵,可以实现相邻元素交换位置的操作,给出初试状态和目标状态,试求最少操作数的方案: 2.输入输出:输入给出初试矩阵和目标矩阵:要求输出最小操作的次数: 3.分析:输出最小操作数,很容易联想到使用BFS,这里为了方便表示,把4*4的矩阵拉成一个16个数的数组来看,并用一个16位二进制数表示其状态:用位运算来实现交换某两位的状态,另外再稍微注意一下如何在表示"相邻"的概念即可: 1 # include <iostream> 2 # inclu

Vijos CoVH之再破难关(搜索+hash)

背景 在瞬间之下,明白所有真相只要开始,就不会停止... 揭开唯一事实,外表是小孩,头脑却是大人他的名字就叫...名侦探柯南! 描述 [CoVH07]OIBH组织派出的黄金十二人+青铜五小强还没有到, 他们只能指望原先的机关能够阻拦住柯南的脚步. 柯南打开大门之后发现里面还有一个门, 门上还有一个神奇的锁(-,-) 这是一个4*4的锁, 上面有8个凸起的格子和8个被按下的格子当且仅当两个格子有公共边时, 则称这两个格子是相邻的. 每次操作只能够交换相邻的两个格子 柯南看到了初始锁的状态 和目标锁

2018汽车锁干扰 器

2018汽车锁干扰 器[电/薇同.号:130乄7306乄8102.无丨法乄丨打丨开][请乄.致乄.电.乄看.乄乄效.果][精.乄诚.合乄.作.][此乄乄信乄息乄永久乄有乄乄效][薇.信已开通]以实力求生存,以信誉求发展] 打不开请添加薇.信或拨打电话]"台美"日趋频繁热络联系 国台办:会自食其果联文基.金"的招募材料称,其所募资金主要用于获取南开国有资产经营有限(下称"南开国资")的80%股权,进行天津南开光电子城项目的一级土地整理,并以土地出让收入作为还

汽车开锁干扰 器

汽车开锁干扰 器[电/薇同.号:130乄7306乄8102.无丨法乄丨打丨开][请乄.致乄.电.乄看.乄乄效.果][精.乄诚.合乄.作.][此乄乄信乄息乄永久乄有乄乄效][薇.信已开通]以实力求生存,以信誉求发展] 打不开请添加薇.信或拨打电话]"台美"日趋频繁热络联系 国台办:会自食其果联文基.金"的招募材料称,其所募资金主要用于获取南开国有资产经营有限(下称"南开国资")的80%股权,进行天津南开光电子城项目的一级土地整理,并以土地出让收入作为还款来源

汽车锁车干扰 器|汽车干扰遥控 器

汽车锁车干扰 器|汽车干扰遥控 器[电/薇同.号:130乄7306乄8102.无丨法乄丨打丨开][请乄.致乄.电.乄看.乄乄效.果][精.乄诚.合乄.作.][此乄乄信乄息乄永久乄有乄乄效][薇.信已开通]以实力求生存,以信誉求发展] 打不开请添加薇.信或拨打电话]"台美"日趋频繁热络联系 国台办:会自食其果联文基.金"的招募材料称,其所募资金主要用于获取南开国有资产经营有限(下称"南开国资")的80%股权,进行天津南开光电子城项目的一级土地整理,并以土地出

JAVA synchronized关键字锁机制(中)

synchronized 锁机制简单的用法,高效的执行效率使成为解决线程安全的首选. 下面总结其特性以及使用技巧,加深对其理解. 特性: 1. Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码.       2. 当一个线程同时访问object的一个synchronized(this)同步代码块时,其它线程仍然可以访问非修饰的方法或代码块.       3. 当多个线程同时访问object的synchronized(this)同步代码

Mysql的锁机制与PHP文件锁处理高并发简单思路

以购买商品举例: ① 从数据库获取库存的数量. ② 检查一下库存的数量是否充足. ③ 库存的数量减去买家购买的数量(以每个用户购买一个为例). ④ 最后完成购买. 仅仅这几行逻辑代码在并发的情况下会出现问题,自己可以想象一下. 这里暂时就不测试了,下面会针对并发的处理给出测试结果. 创建表: CREATE TABLE `warehouse` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id', `stock` int(11) NOT NULL

《深入理解Java虚拟机》笔记04 -- 并发锁

Java虚拟机在操作系统层面会先尽一切可能在虚拟机层面上解决竞争关系,尽可能避免真实的竞争发生.同时,在竞争不激烈的场合,也会试图消除不必要的竞争.实现这些手段的方法包括:偏向锁.轻量级锁.自旋锁.锁消除.锁膨胀等 1. 偏向锁 偏向锁是JDK1.6提出的一种锁优化方式.其核心思想是:如果程序没有竞争,则取消之前已经取得锁的线程同步操作.也就是说,若某一锁被线程获取后,便进入偏向模式,当线程再次请求这个锁时,无需再进行相关的同步操作,从而节省了操作时间.如果在此之间有其他线程进行了锁请求,则锁退