bzoj4554: [Tjoi2016&Heoi2016]遊戲(二分圖匹配)
題目傳送門
這道題。
我很好奇軟石頭的作用除了不能放還有別的什麼嗎。
解法:
一眼看上去最小割或二分圖匹配。
我是不是網路流做傻了。
想了很久不知道怎麼割。
亮哥看了路牌是二分圖匹配。
然後就往那方面想。
然後分成若干行和列就OK了呀。
重新分行和列。
連著的一段為新的行和列。
然後一行只能匹配一列。
那麼久二分圖匹配就好了。
程式碼實現:
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<iostream>
using namespace std;
struct node {int x,y,next;}a[2100000];int len,last[1100000];
void ins(int x,int y) {len++;a[len].x=x;a[len].y=y;a[len].next=last[x];last[x]=len;}
int chw[2510000];int match[2510000],t;
bool findmuniu(int x) {
for(int k=last[x];k;k=a[k].next) {
int y=a[k].y;
if(chw[y]!=t) {
chw[y]=t;
if(match[y]==0||findmuniu(match[y])==true) {match[y]=x;return true;}
}
}return false;
}
char map[1100][1100],ss[2100000];
int hang[1100][1100],lie[1100][1100];
int main() {freopen("game8.in","r",stdin);
int n,m;scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)scanf("%s",map[i]+1);int h=0,l=0;
for(int i=1;i<=n;i++)for(int j=1;j<=m;j++) {
if(map[i][j]=='*') {h++;for(int jj=j;jj<=m;jj++) {if(map[i][jj]=='#') {j=jj;break;}hang[i][jj]=h;if(jj==m)j=m;}}
}
for(int j=1;j<=m;j++)for(int i=1;i<=n;i++) {
if(map[i][j]=='*') {l++;for(int ii=i;ii<=n;ii++) {if(map[ii][j]=='#') {i=ii;break;}lie[ii][j]=l;if(ii==n)i=n;}}
}
len=0;memset(last,0,sizeof(last));
for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(map[i][j]=='*')ins(hang[i][j],lie[i][j]);
int ans=0;t=0;
for(int i=1;i<=h;i++) {t++;if(findmuniu(i)==true)ans++;}
printf("%d\n",ans);
return 0;
}
相關文章
- 二分圖匹配
- 二分圖最大權完美匹配
- 二分圖最小點覆蓋等於二分圖最大匹配
- 圖論-二分圖匹配匈牙利演算法圖論演算法
- 二分圖的最大匹配、完美匹配和匈牙利演算法演算法
- POJ - 3041 Asteroids 【二分圖匹配】AST
- 二分圖最大匹配(匈牙利演算法)演算法
- POJ 3041-Asteroids(二分圖匹配)AST
- KM演算法——二分圖的最佳匹配演算法
- 匈牙利演算法--二分圖的最大匹配演算法
- BZOJ 1059 [ZJOI2007]矩陣遊戲:二分圖匹配矩陣遊戲
- 詳解匈牙利演算法與二分圖匹配演算法
- 二分圖的最大匹配的匈牙利演算法演算法
- 二分圖最大匹配問題匈牙利演算法演算法
- 《啊哈!演算法》我要做月老 ——二分圖最大匹配演算法
- 二分圖的最大匹配(匈牙利演算法)程式碼演算法
- POJ 1325-Machine Schedule(二分圖匹配-匈牙利演算法)Mac演算法
- poj2400 KM演算法二分圖的完美匹配演算法
- HDU 2063 匈牙利演算法二分圖的最大匹配演算法
- hdu2255 二分圖的最佳匹配 KM演算法演算法
- POJ 1469-COURSES(二分圖匹配入門-匈牙利演算法)演算法
- hdu5090 匈牙利演算法二分圖最大匹配問題演算法
- bzoj4552: [Tjoi2016&Heoi2016]排序(二分+線段樹)排序
- hihocoder 1158 質數相關(二分圖匹配 最大獨立集)
- Uva11383 二分圖的完美匹配(深入理解KM演算法)演算法
- 二分圖(Java)Java
- 對匈牙利演算法理解——對二分圖進行最大匹配的演算法演算法
- 演算法學習之路|二分圖的最大匹配—匈牙利演算法(Dfs實現)演算法
- 『筆記』二分圖筆記
- 二分圖(例題)
- 二分圖補充
- 關於二分圖上的最大匹配、最小點覆蓋、最大獨立集以及最大權閉合子圖的聯絡
- BZOJ 1191 [HNOI2006]超級英雄Hero:二分圖匹配 匈牙利演算法演算法
- 圖解--二分查詢樹圖解
- 圖的匹配與網路流
- 月老的難題&&二分圖最大匹配模板&&http://acm.nyist.net/JudgeOnline/problem.php?pid=239HTTPACMPHP
- POJ 3014:Asteroids(二分匹配,匈牙利演算法)AST演算法
- Day2二分圖筆記筆記