poj2724 Purifying Machine
来源:互联网 发布:开淘宝网店注册收费 编辑:程序博客网 时间:2024/06/06 02:34
每个奶酪上面n位二进制,含有0,1,*三种符号,现在有m个奶酪,我们需要用一个机器来clear这些奶酪,clear的条件就是机器上的n位二进制与奶酪上面的二进制相同,但是*可以代替0或1,所以这样的话只要两个奶酪的只有一个位置不同的话,还是可以用同一个改变clear两个奶酪了,所以这样就建边。然后就是最小边覆盖。
/*****************************************Author :Crazy_AC(JamesQi)Time :2015File Name :*****************************************/// #pragma comment(linker, "/STACK:1024000000,1024000000")#include <iostream>#include <algorithm>#include <iomanip>#include <sstream>#include <string>#include <stack>#include <queue>#include <deque>#include <vector>#include <map>#include <set>#include <cstdio>#include <cstring>#include <cmath>#include <cstdlib>#include <climits>using namespace std;#define MEM(x,y) memset(x, y,sizeof x)#define pk push_backtypedef long long LL;typedef unsigned long long ULL;typedef pair<int,int> ii;typedef pair<ii,int> iii;const double eps = 1e-10;const int inf = 1 << 30;const int INF = 0x3f3f3f3f;const int MOD = 1e9 + 7;const int N = 1 << 11;int g[N][N];int num[N*2];int n, m;int top;char s[20];void input() {top = 0;for (int i = 1;i <= m;++i) {scanf("%s",s);int ans = 0;for (int j = 0;j < n;++j) {if (s[j] == '*') ans = ans * 2 + 0;else ans = ans * 2 + s[j] - '0';}num[++top] = ans;ans = 0;for (int j = 0;j < n;++j) {if (s[j] == '*') ans = ans * 2 + 1;else ans = ans * 2 + s[j] - '0';}num[++top] = ans;}sort(num + 1,num + 1 + top);// for (int i = 1;i <= top;++i)// printf("%4d",num[i]);int up = 1;for (int i = 2;i <= top;++i) {if (num[i] != num[up]) {num[++up] = num[i];}}top = up;// cout << "top = " << top << endl;memset(g, 0,sizeof g);for (int i = 1;i <= top;++i) {for (int j = i + 1;j <= top;++j) {int t = num[i] ^ num[j];if (t && (t&(t-1))==0)g[i][j] = g[j][i] = 1;}}// for (int i = 1;i <= top;++i) {// for (int j = 1;j <= top;++j)// printf("%2d",g[i][j]);// puts("");// }}int cx[N], cy[N];bool vis[N];bool dfs(int u) {for (int i = 1;i <= top;++i) {if (!vis[i] && g[u][i]) {vis[i] = true;if (cy[i] == 0 || dfs(cy[i])) {cy[i] = u;cx[u] = i;return true;}}}return false;}int hungary() {memset(cx, 0,sizeof cx);memset(cy, 0,sizeof cy);int ans = 0;for (int i = 1;i <= top;++i) {memset(vis, false,sizeof vis);if (dfs(i)) ans++;}return ans;}int main(){// freopen("in.txt","r",stdin);// freopen("out.txt","w",stdout);while(~scanf("%d%d",&n,&m) && (n + m)) {input();int ans = hungary();// cout << top << endl;printf("%d\n",top - ans/2);}return 0;}
0 0
- poj2724 Purifying Machine
- poj2724 Purifying Machine
- 【poj2724】 Purifying Machine
- POJ2724 Purifying Machine(二分图)
- POJ2724 Purifying Machine二分图,最小边覆盖
- POJ2724 Purifying Machine【二分图最小边覆盖】
- 2724 Purifying Machine //MAXMATCH
- POJ 2724 Purifying Machine
- POJ-2724-Purifying Machine
- POJ 2724 Purifying Machine
- Purifying Machine UVA
- UVA 1663(p381)----Purifying Machine
- poj2724
- POJ2724
- poj 2724 Purifying Machine 二分匹配
- poj 2724 Purifying Machine 最小路径覆盖
- poj 2724 Purifying Machine (最小边覆盖)
- UVa 1663 - Purifying Machine(二分匹配)
- JavaWeb将数据包装成JSON以及JSP通过ajax对JSON的获取与解析(代码实例)
- 关于Eclipse使用天天模拟器调试Android程序
- 跟Tennant一起学编程--Python环境配置及各种HelloWorld的姿势
- 算法导论例程——快速排序
- Java字节流
- poj2724 Purifying Machine
- 接口1
- AMS1117 5v 变3.5
- CentOS环境下Redis安装
- 什么是mov压敏电阻 保护作用
- 【3】Toasts
- Linux服务器权限管理实践——添加用户只访问某些文件目录
- nRF905 无线发射模块
- LeetCode Maximum Depth of Binary Tree