博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[HEOI2016/TJOI2016]游戏 解题报告
阅读量:5226 次
发布时间:2019-06-14

本文共 982 字,大约阅读时间需要 3 分钟。

看起来就是个二分图匹配啊

最大化匹配是在最大化边数,那么一条边就代表选中一个坐标内的点

但是每一行不一定只会有一个匹配

于是把点拆开,按照'#'划分一下就好了


Code:

#include 
#include
#include
template
void read(T &x){ x=0;char c=getchar(); while(!isdigit(c)) c=getchar(); while(isdigit(c)) x=x*10+c-'0',c=getchar();}const int N=52;const int M=1010;int Idr[N][N],Idc[N][N],r,c,n,m,yuu[M][M],vis[M],mat[M];char s[N][N];bool dfs(int now){ for(int i=1;i<=m;i++) if(!vis[i]&&yuu[now][i]) { vis[i]=1; if(!mat[i]||dfs(mat[i])) return mat[i]=now,true; } return false;}int main(){ read(r),read(c); for(int i=1;i<=r;i++) { scanf("%s",s[i]+1); int las=1; for(int j=1;j<=c+1;j++) { if(s[i][j]=='#'||j==c+1) { if(las==j) {las=j+1;continue;} ++n; for(int k=las;k

2019.3.6

转载于:https://www.cnblogs.com/butterflydew/p/10483914.html

你可能感兴趣的文章
delphi也可以使用C语言脚本 --Picoc脚本语言
查看>>
visio 如何扩大画布大小
查看>>
css权威指南读书笔记
查看>>
C语言中关联计数器的协同管理
查看>>
web-11. 层叠式表的属性与滤镜
查看>>
Vue
查看>>
表变量与临时表的优缺点(转)
查看>>
shell脚本图书
查看>>
UNIX环境高级编程——线程限制
查看>>
UNIX网络编程——原始套接字SOCK_RAW
查看>>
TCP发送源码学习(1)--tcp_sendmsg
查看>>
使用两个不同类型的数据进行加法计算时,使用异常处理语句捕获由于数据类型错误而出现的异常,发生生成错误。是否继续并运行上次的成功生成?...
查看>>
python-三级菜单和购物车程序
查看>>
web开发灵感推荐--34个有吸引力的电影网站设计灵感
查看>>
sql操作
查看>>
条件断点 符号断点
查看>>
第二十三模板 18.3.5 位集合
查看>>
LEFT JOIN条件写在where里是不会多查出数据来的
查看>>
手把手 学习Git
查看>>
LeetCode 162. Find Peak Element (找到峰值)
查看>>