Light OJ 1373 Strongly Connected Chemicals 二分匹配最大独立集
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 二分匹配最大独立集相关推荐
- POJ - 2446 Chessboard 二分匹配+建图
题目链接 题意很简单,是二分匹配的一种常见的题型,问题就在于怎样转换到二分图上来. 首先对对n*m-k正常点进行编号,然后遍历查找每一个正常点的上下左右是否能连接(就是判断另个点是否也是正常的),如果 ...
- poj3041--Asteroids(二分匹配)[将矩阵行列转化为边]
题目大意,给出n*n的矩阵,其中有m个流星,一下给出每颗流星的坐标,每一次攻击可以消除一行或一列的流星,问最少攻击几次? 竟然是二分匹配!竟然是二分匹配!竟然是二分匹配!竟然是二分匹配! 建图,以行为 ...
- HDU 4635 Strongly connected(缩点、最多可加边数使得仍然非强连通)
整理的算法模板合集: ACM模板 HDU 4635 Strongly connected Give a simple directed graph with N nodes and M edges. ...
- 香港大学提出OneNet:一阶段端到端目标检测网络,无需NMS!无需二分匹配!
点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要15分钟 Follow小博主,每天更新前沿干货 本文作者:孙培泽 | 编辑:Amusi https://zhuanlan.zhihu.com ...
- 杭电2063--过山车(二分匹配)
过山车 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- pku 1486 求出二分匹配图中的必须边
开始楞是没看懂意思,E文让我很纠结... 要判断一条边是否为二分图中必须边,方法如下: 1.先求出原图的任意最大匹配 2.对二分图某一边的所有点,删去其当前的匹配边.删的过程不是简单的将原图设为不连通 ...
- POJ1325二分匹配或者DINIC(最小路径覆盖)
题意: 有k个任务,两个机器,第一个机器有n个模式,第二个机器有m个模式,每个任务要么在第一个机器的一个模式下工作,要么在第二个机器的一个模式下工作,机器每切换一个模式需要重启一次,两个 ...
- POJ2239简单二分匹配
题意: 一周有7天,每天可以上12节课,现在给你每科课的上课时间,问你一周最多可以上几科课,一科课只要上一节就行了. 思路: 简单题目,直接二分就行了,好久没写二分匹配了,练习 ...
- hdu2413 二分+二分匹配
题意: 地球和外星球大战,地球有n个飞船,外星球有m个飞船,每个飞船有自己的其实战舰和战舰增长率,星球于星球之间有距离,问你最少多少年地球可以打败外星球,每个星球最多只能和一个星球对战.. ...
最新文章
- C Primer+Plus(十一)
- c语言基础傅里叶变换,急求:C语言如何实现快速傅里叶变换
- uoni扫地机器人好用吗_抖音走红的日本uoni尤利扫地机器人好吗?体验感如何?...
- pat Simulation Test for PAT(B) 9月4日
- (126)FPGA面试题-做了哪些FPGA时序约束?
- 用R语言实现数据离散化
- 好程序员web前端培训分享JavaScript框架
- MathType:在公式中插入空格
- Direct Rendering RenderMan Point Cloud
- DES加密算法介绍(含例子)
- 黑客攻击入侵服务器的6种常见方式
- matlab a律非均匀量化,均匀量化与A律PCM非均匀量化实验.doc
- CentOS7 ECS使用(慕课网付费课笔记)
- 申论中关于人物“精神”、“品质”的总结
- 计算机组成原理相关知识重要吗?
- 合肥工业大学计算机学院加减分,合肥工业大学奖学金加减分细则(定稿修改)
- Linux 静态链接库与动态链接库之一:静态链接库生成及使用
- arduino编码器计数_基于Arduino开发环境的光电编码器检测仪设计方案 - 全文
- Python实战之提取豆瓣华语新碟榜数据
- html5 固定背景,css 背景固定样式background-attachment属性基础
热门文章
- Leaflet实现地图分屏联动
- 我的程序跑了60多小时,就是为了让你看一眼JDK的BUG导致的内存泄漏。
- react如何通过shouldComponentUpdate来减少重复渲染
- 【Python】青少年蓝桥杯_每日一题_12.03_输出字符串的长度
- Android --- RecyclerViwe中使用SnapHelper报错:“An instance of OnFlingListener already set.”
- 数据库分片教程mysql_简述MySQL分片中快速数据迁移
- oracle standby同步,ORACLE 利用rman增量备份同步standby库
- 《上海市数据中心建设导则(2021版)》
- 模块化数据中心有什么优势?
- 深圳出台数据中心PUE新政,或将开启千亿级节能市场