当前位置: 首页 > news >正文

hdu 5093 二分匹配

/*
题意:给你一些冰岛。公共海域和浮冰,冰岛能够隔开两个公共海域,浮冰无影响
求选尽可能多的选一些公共海域点每行每列仅能选一个。
限制条件:冰山能够隔开这个限制条件。即*#*能够选两个
预处理:
*****
**#*#
*****   能够按行转化  

*****
**#oo
ooo*#
*****

按行转化的基础上按列转化
***o**o
**ooooo
oooo*oo
**o**o*
由于每行每列顶多能够添加50
所以总共最多2500*2500的矩阵
然后直接二分匹配就可以
*/
#include<stdio.h>
#include<string.h>
#define N  2800
int ma[N][N];
char s[60][60];
int ans[N][N];
int n,m,addx,addy;
void slovex() {//按行转化
  int i,k;
  addx=0;
for(i=1;i<=n;i++) {
addx++;
 //printf("%d\n",addx);
 k=1;
while(1) {
    for(;s[i][k]!='#'&&k<=m;k++) {
      if(s[i][k]=='*')
       ans[addx][k]=1;
    }
    if(k==m)//最后一个也要算进去,刚開始这里错了一直没看出来重要*****
        ans[addx][k]=2;
    if(k==m+1||k==m)
        break;
    ans[addx][k]=2;
    k++;
    addx++;
}
}
return ;
}
void slovey() {//在按行转化的基础上按列转化
 int i,k;
 addy=0;
 for(i=1;i<=m;i++) {
    addy++;
    k=1;
 //   printf("%d\n",addy);
    while(1) {
        for(;ans[k][i]!=2&&k<=addx;k++) {
            if(ans[k][i]==1)
                ma[k][addy]=1;
        }
        if(k==addx+1||k==addx)
            break;
            k++;
        addy++;
    }
 }
 return;
}
int vis[N],link[N];
int findd(int u) {
int i;
for(i=1;i<=addy;i++)
if(ma[u][i]&&vis[i]==0) {
vis[i]=1;
if(link[i]==-1||findd(link[i])) {
link[i]=u;
return 1;
}
}
return 0;
}
int main() {
    int t,i,sum,j;
    scanf("%d",&t);
    while(t--) {
        scanf("%d%d",&n,&m);
        memset(ma,0,sizeof(ma));
        memset(ans,0,sizeof(ans));
        for(i=1;i<=n;i++)
            scanf("%s",s[i]+1);
        slovex();
       /*     for(i=1;i<=addx;i++) {
                for(j=1;j<=m;j++)
            printf("%d ",ans[i][j]);
            printf("\n");
        }*/
        slovey();
      /*   for(i=1;i<=addx;i++) {
                for(j=1;j<=addy;j++)
            printf("%d ",ma[i][j]);
            printf("\n");
        }*/
        memset(link,-1,sizeof(link));
        sum=0;
        for(i=1;i<=addx;i++) {//直接套模板二分匹配就可以
            memset(vis,0,sizeof(vis));
            sum+=findd(i);
        }
    printf("%d\n",sum);
    }
return 0;}

相关文章:

  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • Spring Boot基础教程——web应用开发-模板引擎
  • APPium-python实例(记录)
  • SpringBoot(Security)
  • 初学Sockets编程(二) 关于名称和地址族
  • HDU - 1166 敌兵布阵
  • Flask+腾讯云windows主机快速搭建微信公众号接口
  • 一、简单工厂模式
  • 微软将所有的Windows代码库迁移到Git
  • magento megatron主题加入中文
  • 对象不支持“abigimage”属性或方法
  • Hyper-v创建检查点(VM的快照功能)
  • dede程序打开install安装时出现dir
  • 解答《编程之美》1.18问题1:给所有未标识方块标注有地雷概率
  • 【EMC】基本概念
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • JavaScript 基础知识 - 入门篇(一)
  • Magento 1.x 中文订单打印乱码
  • React Native移动开发实战-3-实现页面间的数据传递
  • Swoft 源码剖析 - 代码自动更新机制
  • Vue实战(四)登录/注册页的实现
  • 给github项目添加CI badge
  • 开发基于以太坊智能合约的DApp
  • 看域名解析域名安全对SEO的影响
  • 设计模式(12)迭代器模式(讲解+应用)
  • 使用 @font-face
  • 数据结构java版之冒泡排序及优化
  • 微信支付JSAPI,实测!终极方案
  • 怎样选择前端框架
  • 阿里云服务器如何修改远程端口?
  • (007)XHTML文档之标题——h1~h6
  • (26)4.7 字符函数和字符串函数
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (一)Dubbo快速入门、介绍、使用
  • (转载)Linux网络编程入门
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • .FileZilla的使用和主动模式被动模式介绍
  • .NET Project Open Day(2011.11.13)
  • .NET 使用配置文件
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .NetCore部署微服务(二)
  • .net中应用SQL缓存(实例使用)
  • .so文件(linux系统)
  • /deep/和 >>>以及 ::v-deep 三者的区别
  • @31省区市高考时间表来了,祝考试成功
  • @JsonFormat与@DateTimeFormat注解的使用
  • @RestControllerAdvice异常统一处理类失效原因
  • @select 怎么写存储过程_你知道select语句和update语句分别是怎么执行的吗?
  • @德人合科技——天锐绿盾 | 图纸加密软件有哪些功能呢?
  • [100天算法】-不同路径 III(day 73)
  • [2017][note]基于空间交叉相位调制的两个连续波在few layer铋Bi中的全光switch——
  • [Asp.net MVC]Asp.net MVC5系列——Razor语法
  • [C++]类和对象(中)