m种阳离子 n种阴离子 然后一个m*n的矩阵 第i行第j列为1代表第i种阴离子和第j种阴离子相互吸引 0表示排斥

求在阳离子和阴离子都至少有一种的情况下 最多存在多少种离子能够共存

阴阳离子都至少须要存在一种 那么能够枚举哪2种离子共存 如果枚举a b 然后找到全部的和a能够共存的阴离子(设为x集合)以及和b共存的阳离子(设为y集合)

如今仅仅需求x集合中和y集合中最多有多少个离子能够共存 这个求最大独立集即可了 枚举全部的a b 取最大值

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
const int maxn = 55;
int vis[maxn];
int y[maxn];
vector <int> G[maxn];
int n, m;char a[maxn][maxn];
bool dfs(int u)
{for(int i = 0; i < G[u].size(); i++){int v = G[u][i];if(vis[v])continue;vis[v] = true;if(y[v] == -1 || dfs(y[v])){y[v] = u;return true;}}return false;
}
int match()
{int ans = 0;memset(y, -1, sizeof(y));for(int i = 0; i < n; i++){memset(vis, 0, sizeof(vis));if(dfs(i))ans++;}return ans;
}
int main()
{int T;int cas = 1;scanf("%d", &T);while(T--){scanf("%d %d", &n, &m);for(int i = 0; i < n; i++)scanf("%s", a[i]);int ans = 0;for(int i = 0; i < n; i++)for(int j = 0; j < m; j++)if(a[i][j] == '1'){int sum1 = 0, sum2 = 0;for(int h = 0; h < m; h++)if(a[i][h] == '1')sum1++;for(int h = 0; h < n; h++)if(a[h][j] == '1')sum2++;if(ans >= sum1+sum2)continue;for(int h = 0; h < n; h++){G[h].clear();if(a[h][j] == '1'){for(int k = 0; k < m; k++)if(a[i][k] == '1' && a[h][k] == '0')G[h].push_back(k);}}int res = match();if(sum1+sum2-res > ans)ans = sum1+sum2-res;}printf("Case %d: %d\n", cas++, ans);}return 0;
}

转载于:https://www.cnblogs.com/liguangsunls/p/7008156.html

Light OJ 1373 Strongly Connected Chemicals 二分匹配最大独立集相关推荐

  1. POJ - 2446 Chessboard 二分匹配+建图

    题目链接 题意很简单,是二分匹配的一种常见的题型,问题就在于怎样转换到二分图上来. 首先对对n*m-k正常点进行编号,然后遍历查找每一个正常点的上下左右是否能连接(就是判断另个点是否也是正常的),如果 ...

  2. poj3041--Asteroids(二分匹配)[将矩阵行列转化为边]

    题目大意,给出n*n的矩阵,其中有m个流星,一下给出每颗流星的坐标,每一次攻击可以消除一行或一列的流星,问最少攻击几次? 竟然是二分匹配!竟然是二分匹配!竟然是二分匹配!竟然是二分匹配! 建图,以行为 ...

  3. HDU 4635 Strongly connected(缩点、最多可加边数使得仍然非强连通)

    整理的算法模板合集: ACM模板 HDU 4635 Strongly connected Give a simple directed graph with N nodes and M edges. ...

  4. 香港大学提出OneNet:一阶段端到端目标检测网络,无需NMS!无需二分匹配!

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要15分钟 Follow小博主,每天更新前沿干货 本文作者:孙培泽 |  编辑:Amusi https://zhuanlan.zhihu.com ...

  5. 杭电2063--过山车(二分匹配)

    过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  6. pku 1486 求出二分匹配图中的必须边

    开始楞是没看懂意思,E文让我很纠结... 要判断一条边是否为二分图中必须边,方法如下: 1.先求出原图的任意最大匹配 2.对二分图某一边的所有点,删去其当前的匹配边.删的过程不是简单的将原图设为不连通 ...

  7. POJ1325二分匹配或者DINIC(最小路径覆盖)

    题意:        有k个任务,两个机器,第一个机器有n个模式,第二个机器有m个模式,每个任务要么在第一个机器的一个模式下工作,要么在第二个机器的一个模式下工作,机器每切换一个模式需要重启一次,两个 ...

  8. POJ2239简单二分匹配

    题意:       一周有7天,每天可以上12节课,现在给你每科课的上课时间,问你一周最多可以上几科课,一科课只要上一节就行了. 思路:       简单题目,直接二分就行了,好久没写二分匹配了,练习 ...

  9. hdu2413 二分+二分匹配

    题意:       地球和外星球大战,地球有n个飞船,外星球有m个飞船,每个飞船有自己的其实战舰和战舰增长率,星球于星球之间有距离,问你最少多少年地球可以打败外星球,每个星球最多只能和一个星球对战.. ...

最新文章

  1. C Primer+Plus(十一)
  2. c语言基础傅里叶变换,急求:C语言如何实现快速傅里叶变换
  3. uoni扫地机器人好用吗_抖音走红的日本uoni尤利扫地机器人好吗?体验感如何?...
  4. pat Simulation Test for PAT(B) 9月4日
  5. (126)FPGA面试题-做了哪些FPGA时序约束?
  6. 用R语言实现数据离散化
  7. 好程序员web前端培训分享JavaScript框架
  8. MathType:在公式中插入空格
  9. Direct Rendering RenderMan Point Cloud
  10. DES加密算法介绍(含例子)
  11. 黑客攻击入侵服务器的6种常见方式
  12. matlab a律非均匀量化,均匀量化与A律PCM非均匀量化实验.doc
  13. CentOS7 ECS使用(慕课网付费课笔记)
  14. 申论中关于人物“精神”、“品质”的总结
  15. 计算机组成原理相关知识重要吗?
  16. 合肥工业大学计算机学院加减分,合肥工业大学奖学金加减分细则(定稿修改)
  17. Linux 静态链接库与动态链接库之一:静态链接库生成及使用
  18. arduino编码器计数_基于Arduino开发环境的光电编码器检测仪设计方案 - 全文
  19. Python实战之提取豆瓣华语新碟榜数据
  20. html5 固定背景,css 背景固定样式background-attachment属性基础

热门文章

  1. Leaflet实现地图分屏联动
  2. 我的程序跑了60多小时,就是为了让你看一眼JDK的BUG导致的内存泄漏。
  3. react如何通过shouldComponentUpdate来减少重复渲染
  4. 【Python】青少年蓝桥杯_每日一题_12.03_输出字符串的长度
  5. Android --- RecyclerViwe中使用SnapHelper报错:“An instance of OnFlingListener already set.”
  6. 数据库分片教程mysql_简述MySQL分片中快速数据迁移
  7. oracle standby同步,ORACLE 利用rman增量备份同步standby库
  8. 《上海市数据中心建设导则(2021版)》
  9. 模块化数据中心有什么优势?
  10. 深圳出台数据中心PUE新政,或将开启千亿级节能市场