POJ 2446 匈牙利算法
2016-08-06 14:28
225 查看
题意:
思路:
二分图匹配。。。
// by SiriusRen #include <cmath> #include <cstdio> #include <cstring> using namespace std; #define N 1111 int n,m,k,xx[]={1,-1,0,0},yy[]={0,0,1,-1},jyx,jyy,T,fa ,ans=0; bool a ,map[35][35],vis ; bool dfs(int x){ for(int i=1;i<=T;i++) if(a[x][i]&&!vis[i]){ vis[i]=1; if(!fa[i]||dfs(fa[i])){ fa[i]=x;return 1; } } return 0; } int main() { scanf("%d%d%d",&m,&n,&k),T=(m-1)*n+n; for(int i=1;i<=m;i++)map[i][0]=map[i][n+1]=1; for(int i=1;i<=n;i++)map[0][i]=map[m+1][i]=1; for(int i=1;i<=k;i++)scanf("%d%d",&jyy,&jyx),map[jyx][jyy]=1; for(int i=1;i<=m;i++)for(int j=1;j<=n;j++) if(!map[i][j])for(int l=0;l<4;l++) if(!map[i+xx[l]][j+yy[l]])a[(i-1)*n+j][(i+xx[l]-1)*n+j+yy[l]]=1; for(int i=1;i<=T;i++,memset(vis,0,sizeof(vis)))if(dfs(i))ans++; if(ans+k==T)puts("YES"); else puts("NO"); }
相关文章推荐
- poj 2446 二分图匹配,匈牙利算法
- POJ 2446 Chessboard(匈牙利算法)
- poj 2446 二分图最大匹配 匈牙利算法
- POJ 2446 Chessboard(匈牙利算法)
- Poj 2446 Chessboard 匈牙利算法
- POJ 2446 Chessboard (匈牙利算法)
- POJ2446——匈牙利算法讲解
- Poj 2446 Chessboard 匈牙利算法
- POJ 2446 匈牙利算法
- poj_2446 Chessboard匈牙利算法
- POJ 1469,1274,2239,2536,2584,2446二分图的匈牙利算法(裸)
- poj 3020 匈牙利算法
- poj 匈牙利二分匹配算法2239 Selecting Courses
- 匈牙利算法之POJ1087
- poj 3041 二分匹配 基础题(整理版:基础知识)匈牙利算法
- poj 3715 Blue and Red(二分图最大匹配匈牙利算法)
- POJ 3041 Asteroids 匈牙利算法/最小点覆盖
- poj 3041 匈牙利算法 最小点覆盖
- POJ 1274 The Perfect Stall (匈牙利算法)
- POJ 3020 Antenna Placement 匈牙利算法