poj 2724 Purifying Machine(二分图最大匹配)
题意:
有2^N块奶酪,编号为00...0到11..1。
有一台机器,有N个开关。每个开关可以置0或置1,或者置*。但是规定N个开关中最多只能有一个开关置*。
一旦打开机器的开关,机器将根据N个开关的状态对状态对应的编号的奶酪进行消毒。
例如:111 --> 对编号111的奶酪进行消毒。 说明:*代表0或1。 例如:1*1 --> 对编号为101和111的奶酪进行消毒。
现在有一些奶酪被污染了。给出这些奶酷的编号。
问最少需要几次对机器进行设定,使得所有的奶酪都被消毒。
思路:
一个带*的状态可以对两块奶酪进行杀毒。如果两块奶酪都没被之前的操作消过毒,那么这个状态是可以减少机器操作数的。所以这个带*的状态一定要操作的。
则我们要尽量地多找带*的状态,每一种状态消毒的两块奶酪都没有被其它带*的操作消过毒。二分图模型若隐若现了。
要消毒的奶酷复制一份,左边一份,右边一份,如果左边集合的某块奶酪编号和右边集合的某块奶酪编号差一位,则它们可以通过一次操作进行消毒。
求二分图的最大匹配M。
答案: 要消毒的奶酪块数 - M/2
*(未解决):有一个东西不知道咋证。就是这个最大匹配为啥一定就是2倍的关系。
可不可能存在:假设(1-2,3 2-1,3 3-1,2) (1-2,3,4 2-1,3,4 3-1,2,4 4-1,2,3)
1-2 2-3 3-1 这样的情况。(正确应该是1-2 2-1) 或者 1-2 2-3 3-4 4-1 (虽然可以调整为1-2 2-1 3-4 4-3)
代码:
int n,m,c;
char s[15];
bool ex[2005];
int num[2005];
vector<int> graph[2005];
bool bmask[2005];
int cx[2005],cy[2005]; int findPath(int u){
int L=graph[u].size();
rep(i,0,L-1){
int v=graph[u][i];
if(!bmask[v]){
bmask[v]=true;
if(cy[v]==-1||findPath(cy[v])){
cy[v]=u;
cx[u]=v;
return 1;
}
}
}
return 0;
}
int MaxMatch(){
int ans=0;
rep(i,1,c) cx[i]=cy[i]=-1;
rep(i,1,c) if(cx[i]==-1){
mem(bmask,false);
ans+=findPath(i);
}
return ans;
} bool OneDigit(int x,int y){
int f=0;
while(x||y){
f+=((x&1)!=(y&1));
x>>=1, y>>=1;
}
if(f==1)
return true;
else
return false;
} int main(){
while(scanf("%d%d",&n,&m)!=EOF,n||m){
mem(ex,false);
c=0;
rep(i,1,2*m) graph[i].clear(); rep(i,1,m){
scanf("%s",s);
int ts1=0,ts2=0;
rep(j,0,n-1){
ts1*=2; ts2*=2;
if(s[j]!='*') ts1+=(s[j]-'0'), ts2+=(s[j]-'0');
else ts1+=0, ts2+=1;
}
if(!ex[ts1]) { num[++c]=ts1; ex[ts1]=true; }
if(!ex[ts2]) { num[++c]=ts2; ex[ts2]=true; }
} rep(i,1,c) rep(j,1,c){
if(OneDigit(num[i],num[j])) graph[i].push_back(j);
}
int dd=MaxMatch()/2;
printf("%d\n",c-dd);
}
}
poj 2724 Purifying Machine(二分图最大匹配)的更多相关文章
- POJ 2724 Purifying Machine (二分图匹配)
题意 给定m个长度为n的01串(*既表示0 or 1.如*01表示001和101).现在要把这些串都删除掉,删除的方法是:①一次删除任意指定的一个:②如果有两个串仅有一个字符不同,则可以同时删除这两个 ...
- POJ 2724 Purifying Machine(最大独立集)
POJ 2724 Purifying Machine 题目链接 题意:这题题意有点没看懂.看了别人的题解, 给出m串长度为n的01串. 有些串中可能包括,这种串能够表示两个串,为1 和为0. 反复的算 ...
- poj 2724 Purifying Machine
Purifying Machine Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 5408 Accepted: 1575 ...
- poj 2724 Purifying Machinef
poj 2724 Purifying Machinef 题意 每一个01串中最多含有一个'*','*'既可表示0也可表示1,给出一些等长的这样的01串,问最少能用多少个这样的串表示出这些串.如:000 ...
- POJ - 1422 Air Raid 二分图最大匹配
题目大意:有n个点,m条单向线段.如今问要从几个点出发才干遍历到全部的点 解题思路:二分图最大匹配,仅仅要一条匹配,就表示两个点联通,两个点联通仅仅须要选取当中一个点就可以,所以有多少条匹配.就能够减 ...
- POJ 3041 Asteroids(二分图最大匹配)
###题目链接### 题目大意: 给你 N 和 K ,在一个 N * N 个图上有 K 个 小行星.有一个可以横着切或竖着切的武器,问最少切多少次,所有行星都会被毁灭. 分析: 将 1~n 行数加入左 ...
- POJ 2446 Chessboard(二分图最大匹配)
题意: M*N的棋盘,规定其中有K个格子不能放任何东西.(即不能被覆盖) 每一张牌的形状都是1*2,问这个棋盘能否被牌完全覆盖(K个格子除外) 思路: M.N很小,把每一个可以覆盖的格子都离散成一个个 ...
- [POJ] 3020 Antenna Placement(二分图最大匹配)
题目地址:http://poj.org/problem?id=3020 输入一个字符矩阵,'*'可行,'o'不可行.因为一个点可以和上下左右四个方向的一个可行点组成一个集合,所以对图进行黑白染色(每个 ...
- [POJ] 2239 Selecting Courses(二分图最大匹配)
题目地址:http://poj.org/problem?id=2239 Li Ming大学选课,每天12节课,每周7天,每种同样的课可能有多节分布在不同天的不同节.问Li Ming最多可以选多少节课. ...
随机推荐
- 学习PHP中统计扩展函数的使用
做统计相关系统的朋友一定都会学习过什么正态分布.方差.标准差之类的概念,在 PHP 中,也有相应的扩展函数是专门为这些统计相关的功能所开发的.我们今天要学习的 stats 扩展函数库就是这类操作函数. ...
- 【PHP数据结构】PHP数据结构及算法总结
断断续续地把这个系列写完了,就像上一个设计模式一样,算法这个系列也是前前后后写了将近有一年的时间.当然,都是在业余或者晚上的时间写完的,所以进度如此地慢.更主要的是,既然要写,总得要自己先弄懂吧,对于 ...
- 数组转为unicode字符编码字符串
json_encode($data, JSON_UNESCAPED_UNICODE)在创建微信卡券,发送数据时需要这个
- JMeter脚本开发
什么是jmeter脚本 用户操作系统的动作流程 用户操作系统的请求 类似演戏的剧本 怎么快速开发漂亮的jmeter脚本 准确 快速 漂亮,脚本逻辑清晰,维护性高 脚本开发方案 代理 http代理服务器 ...
- Windows下Vim插件管理器Vundle的安装以及使用简介
Vundle下载 从GitHub clone仓库 cd %USERPROFILE% git clone git@github.com:VundleVim/Vundle.vim.git %USERPRO ...
- 为什么 Dapr 如此令人兴奋
如今你构建软件,您可以从数量众多的云服务中进行选择.仅 AWS 就每个月都在不断为其200多项服务添加新服务,而其他云提供商也都在跟上. 如果您的公司想与您的竞争对手竞争,您就需要充分利用这些服务,这 ...
- 深入理解JAVA虚拟机《二》
对象.内存回收和垃圾收集算法 一.引用计数算法(不可靠) 现在很多比较普遍的判断对象是否存活的算法就是引用计数算法,其大概原理是:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1:当 ...
- Java AES 加密小试牛刀
目录 问题出处 解决方法 方法一 方法二 方法三 补充 总结 在java开发过程中,很多时候我们都需要加密数据,例如声音.敏感信息等.我们通常使用的是 MD5加密.SHA加密.DES 加密.AES 加 ...
- 树莓派3B搭建NODE-RED运行环境并构建数据流
树莓派3B搭建NODE-RED运行环境并构建数据流 树莓派搭建Node-RED环境 树莓派自2015年开始是默认就带NODE-RED的,但是如今已是2018年:)自带的版本已经很老了,可通过下面的命令 ...
- 重修 Tarjan
Tarjan是谁 Tarjan's SCCs(有向图强连通分量)algorithm 给定⼀个有向图 \(G\),若存在 \(rt\in V\),满⾜从 \(rt\) 出发能到达 \(V\) 中的所有的 ...