poj 2446 poj 2226 二分图 建图
来源:互联网 发布:suse linux yast2 编辑:程序博客网 时间:2024/05/24 06:52
poj 2446 Chessboard
http://poj.org/problem?id=2446
把点离散化, 建图
#include <iostream>#include <cstdio>#include <cstring>#include <queue>using namespace std;int m, n, K, map[34][34], a[34*34][34*34] , count ,vis[34*34], match[34*34];int mov[4][2]={-1, 0, 1, 0, 0, 1, 0, -1};void init(){ int x, y, i, j, k; memset(map, -1, sizeof(map)); memset(a, 0, sizeof(a)); memset(match, -1, sizeof(match)); count=0; while(K--){ scanf("%d%d", &y, &x); map[x][y]=0; } for(i=1; i<=m; i++){ for(j=1; j<=n; j++){ if(map[i][j]) map[i][j]=++count ; } } for(i=1; i<=m; i++){ for(j=1; j<=n; j++){ if( !map[i][j] )continue; for(k=0; k<4; k++){ x= i + mov[k][0]; y= j + mov[k][1]; if(x<1 || x>m || y<1 || y>n || map[x][y]==0) continue; a[ map[i][j] ][ map[x][y] ] = 1; } } }}bool find(int p){ int i; for( i=1; i<=count; i++){ if(a[p][i] && !vis[i]){ vis[i]=1 ; if(match[i]==-1 || find(match[i])){ match[i]= p; return true; } } } return false;}void hungary(){ int i, ans=0; for( i=1; i<=count; i++){ memset(vis, 0, sizeof(vis)); if(find(i)) ans++ ; } if(ans==count) printf("YES\n"); else printf("NO\n");}int main(){ // freopen("1.txt", "r", stdin); while(scanf("%d%d%d",&m ,&n ,&K)!=EOF){ init(); hungary(); } return 0;}
poj 2226 Muddy Fields
http://poj.org/problem?id=2226
#include<iostream>#include<cstdio>#include <cmath>#include <cstring>#include <algorithm>using namespace std;char map[55][55];int vis[910], r, c, match[910], a[910][910], rr[55][55], cc[55][55], rm, cm;void init(){ int i,j, count; for(i=0; i<r; i++){ scanf("%*c%s", &map[i]); map[i][c]='.'; } for(j=0; j<=c; j++) map[r][j]='.'; memset(a, 0, sizeof(a)); memset(match, -1, sizeof(match)); for(i=0, rm=0; i<r; i++){ for(j=0 ; j<c; j++){ if(map[i][j] == '*'){ rr[i][j]=rm; if(map[i][j+1]=='.') rm++; } } } for(j=0, cm=0; j<c; j++){ for(i=0; i<r; i++){ if(map[i][j]=='*'){ cc[i][j]=cm; if(map[i+1][j]=='.') cm++; } } } for(i=0; i<r; i++){ for(j=0; j<c; j++){ if(map[i][j]=='*'){ a[rr[i][j]][cc[i][j]]=1; } } }}bool find(int p){ int i; for(i=0; i<cm; i++){ if(a[p][i]&& !vis[i]){ vis[i]=1; if(match[i]==-1 || find(match[i])){ match[i]=p; return true; } } } return false;}void hungary(){ int ans=0; for(int i=0; i<rm; i++){ memset(vis, 0, sizeof(vis)); if(find(i)) ans++; } printf("%d\n", ans);}int main(){ // freopen("1.txt", "r", stdin); while(scanf("%d%d", &r, &c)!=EOF){ init(); hungary(); } return 0;}
- poj 2446 poj 2226 二分图 建图
- poj 2446 poj 1469 poj 1274 二分图最大匹配
- poj 2226 二分图匹配
- poj 2226 二分图匹配
- poj 2446 (二分图匹配)
- POJ 2446 二分图匹配
- poj 2446 Chessboard(二分图)
- POJ 2446 Chessboard 二分图
- poj 2446 二分匹配
- poj 2446 (二分匹配)
- poj 1693 二分图
- poj 3020 二分图
- poj 3041 二分图
- poj 1422(二分图)
- poj 2536(二分图)
- POJ 2112 二分图
- poj 3020 二分图
- poj 2728 二分图
- try语句的嵌套
- Java 20
- poj 3692 Kindergarten 二分图 最大独立集
- OpenNI学习手册翻译二
- [Unix系统编程]用信号量实现哲学家就餐问题
- poj 2446 poj 2226 二分图 建图
- c++ 读写excel
- 0.c++-显式打印、改变lib库加载顺序(/verbose:lib)
- 数据流 字符流
- raid5
- 0.c++-static_cast、reinterpret_cast、dynamic_cast、等转换
- 幸福知觉
- hdu3664
- srio