【二分图最大匹配】BZOJ4554 [Tjoi2016&Heoi2016]游戏
来源:互联网 发布:海关数据免费查询系统 编辑:程序博客网 时间:2024/05/24 01:38
题面在这里
典型的二分图最大匹配……
只需要把每行/每列的空隙看作点
空地就看作空隙之间的联系
建边刷即可
这里用了时间戳标记,新姿势Get
示例程序:
#include<cstdio>#include<cstring>inline char fstchar(){ char ch=getchar();while (ch!='*'&&ch!='#'&&ch!='x') ch=getchar(); return ch;}const int maxn=5005,maxe=2505;int n,m,h[55][55],z[55][55],Tim=0;char a[55][55];int tot,lnk[maxn],son[maxe],nxt[maxe];inline void add(int x,int y){ son[++tot]=y;nxt[tot]=lnk[x];lnk[x]=tot;}int vis[maxn],con[maxn];bool find(int x){ if (vis[x]==Tim) return 0; vis[x]=Tim; for (int j=lnk[x];j;j=nxt[j]){ int k=con[son[j]];con[son[j]]=x; if (!k||find(k)) return 1; con[son[j]]=k; } return 0;}int main(){ scanf("%d%d",&n,&m); memset(a,'#',sizeof(a)); for (int i=1;i<=n;i++){ a[i][1]=fstchar(); for (int j=2;j<=m;j++) a[i][j]=getchar(); } int N=0; for (int i=1;i<=n;i++) for (int j=1;j<=m;j++){ if (a[i][j-1]=='#') N++; if (a[i][j]=='*') h[i][j]=N; } int maxH=N; for (int j=1;j<=m;j++) for (int i=1;i<=n;i++){ if (a[i-1][j]=='#') N++; if (a[i][j]=='*') z[i][j]=N; } for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) if (a[i][j]=='*') add(h[i][j],z[i][j]); int ans=0; for (int i=1;i<=maxH;i++) Tim++,ans+=find(i); printf("%d",ans); return 0;}
阅读全文
2 0
- BZOJ4554(Tjoi2016&Heoi2016)[游戏]--二分图最大匹配
- 【二分图最大匹配】BZOJ4554 [Tjoi2016&Heoi2016]游戏
- bzoj4554 [Tjoi2016&Heoi2016]游戏(二分图最大匹配)
- 【bzoj4554】【Tjoi2016】【Heoi2016】【游戏】【二分图匹配】
- [BZOJ4554][Tjoi2016&Heoi2016][二分图匹配]游戏
- 二分图匹配——BZOJ4554/Luogu2825 [Tjoi2016&Heoi2016]游戏
- [BZOJ4554][TJOI2016&HEOI2016]游戏(二分图匹配)
- bzoj4554: [Tjoi2016&Heoi2016]游戏(二分图匹配)
- 【bzoj4554】【Tjoi2016&Heoi2016】【游戏】【二分图】
- 二分图 BZOJ4554 [Tjoi2016&Heoi2016]游戏
- [Tjoi2016&Heoi2016]游戏 二分图最大匹配
- bzoj4554 [HEOI2016]游戏 二分匹配
- BZOJ4554 [Tjoi2016&Heoi2016]游戏
- 【bzoj4554】[Tjoi2016&Heoi2016]游戏
- bzoj4554【TJOI2016&HEOI2016】游戏
- [BZOJ4554][Tjoi2016&Heoi2016]游戏
- bzoj4554[Tjoi2016&Heoi2016] 游戏
- 【BZOJ】4554 [Tjoi2016&Heoi2016]游戏 二分图
- Handlebars.js if 功能扩展
- 3177
- Java基础之封装
- springboot上传文件到阿里云OSS
- JeeSite框架学习------主子表创建总结
- 【二分图最大匹配】BZOJ4554 [Tjoi2016&Heoi2016]游戏
- Java中Runnable和Thread的区别
- Android中向ContactsProvider中插入大量联系人(编辑中)
- C++表达式的执行原理
- JS(去掉前后空格或去掉所有空格)的用法
- 7.26 机房欢乐赛 T1 无尽的矩阵 (hash + KMP)
- 视频直播的一些概念性的东西 码率 sdn 等
- java实现图片裁剪、缩放功能
- Ubuntu一个直接以窗口的形式打开文件夹的命令