二分图匹配

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<iostream>
  4. #include<cmath>
  5. #define maxn 60
  6. #define maxd 1500
  7. using namespace std;
  8. int v[maxd][maxd],vist[maxd],math[maxd];
  9.  
  10. int col[maxn][maxn],row[maxn][maxn];
  11. int k1,k2,n,m;
  12. char str[maxn][maxn];
  13. void creat_row()
  14. {
  15. k1=;
  16. for(int i=;i<m;i++)
  17. {
  18. int flag=;
  19. for(int j=;j<n;j++)
  20. {
  21. if(str[i][j]=='*')
  22. {
  23. row[i][j]=k1;
  24. flag=;
  25. }
  26. if(str[i][j]=='#')
  27. {
  28. k1++;
  29. flag=;
  30. }
  31. }
  32. if(flag)
  33. k1++;
  34. }
  35. }
  36. void creat_col()
  37. {
  38. k2=;
  39. for(int j=;j<n;j++)
  40. {
  41. int flag=;
  42. for(int i=;i<m;i++)
  43. {
  44. if(str[i][j]=='*')
  45. {
  46. col[i][j]=k2;
  47. flag=;
  48. }
  49. if(str[i][j]=='#')
  50. {
  51. k2++;
  52. flag=;
  53. }
  54. }
  55. if(flag)
  56. k2++;
  57. }
  58. }
  59. int dfs(int x)
  60. {
  61. for(int i=;i<k2;i++)
  62. {
  63. if(!vist[i]&&v[x][i])
  64. {
  65. vist[i]=;
  66. if(math[i]==-||dfs(math[i]))
  67. {
  68. math[i]=x;
  69. return true;
  70. }
  71.  
  72. }
  73. }
  74. return false;
  75. }
  76. void KM()
  77. {
  78. int ans=;
  79. for(int i=;i<k1;i++)
  80. {
  81. memset(vist,,sizeof(vist));
  82. if(dfs(i)) ans++;
  83. }
  84. printf("%d\n",ans);
  85. }
  86. int main()
  87. {
  88. int t;
  89. scanf("%d",&t);
  90. while(t--)
  91. {
  92. scanf("%d %d",&m,&n);
  93. for(int i=; i<m; i++)
  94. scanf("%s",&str[i]);
  95. creat_row();
  96. creat_col();
  97. //printf("%d %d==\n",k1,k2);
  98. memset(v,,sizeof(v));
  99. memset(math,-,sizeof(math));
  100. for(int i=; i<m; i++)
  101. {
  102. for(int j=; j<n; j++)
  103. {
  104. if(str[i][j]=='*')
  105. v[row[i][j]][col[i][j]]=;
  106. }
  107.  
  108. }
  109. KM();
  110. }
  111. return ;
  112. }

hdu 5093 Battle ships的更多相关文章

  1. HDU 5093 Battle ships(二分图最大匹配)

    题意:一个m行n列的图由#.*.o三种符号组成,分别代表冰山.海域.浮冰,问最多可放的炮舰数(要求满足以下条件) 1.炮舰只可放在海域处 2.两个炮舰不能放在同一行或同一列(除非中间隔着一个或多个冰山 ...

  2. hdu 5093 Battle ships 匈牙利 很巧妙的建图思路

    //这题逼我把匈牙利学了 之前一直很勤快敲网络流 而且不以为耻反以为荣 解:首先按行扫描编号,如果在同一块中(即可以相互攻击),那么将其标为相同的数组,对列也做同样的操作. 然后扫描整张图,如果行编号 ...

  3. hdu 5093 Battle ships (二分图)

    二分图最大匹配问题 遇到冰山就把行列拆成两个部分.每个部分x也好,y也好只能匹配一次 图画得比较草,将就着看 横着扫一遍,竖着扫一遍,得到编号 一个位置就对应一个(xi,yi)就是X集到Y集的一条边, ...

  4. hdu 5093 Battle ships(二分图最大匹配)

    题意: M*N的矩阵,每个格子上是三个之一:*.o.#.                     (1 <= m, n <= 50) *:海洋,战船可以停在上面.      o:浮冰,战船 ...

  5. hdoj 5093 Battle ships 【二分图最大匹配】

    题目:pid=5093" target="_blank">hdoj 5093 Battle ships 题意:给你一个n*m的图,图中有冰山 '# ',浮冰 'o' ...

  6. HDOJ 5093 Battle ships 二分图匹配

    二分图匹配: 分别按行和列把图展开.hungary二分图匹配. ... 例子: 4 4 *ooo o### **#* ooo* 按行展开. .. . *ooo o#oo oo#o ooo# **#o ...

  7. Hdu 5093 Battle Ship

    每个海面要么放要么不放,因此可以用二分图匹配, 考虑把同一行内的能互相看到的点放到一个行块里,同一列内能看到的点放到一个列块里,然后每一个行块都可以和该行块里所有海面的列块连边,选了这个行块,就必须选 ...

  8. Codeforces 567D One-Dimensional Battle Ships

    传送门 D. One-Dimensional Battle Ships time limit per test 1 second memory limit per test 256 megabytes ...

  9. Codeforces Round #Pi (Div. 2) D. One-Dimensional Battle Ships set乱搞

    D. One-Dimensional Battle ShipsTime Limit: 2 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/con ...

随机推荐

  1. qml package 的使用

    什么时候使用这个.就是多个view使用同一个deleagte的时候. The Package class is used in conjunction with VisualDataModel to ...

  2. eclipse常用的字体

    1.consolas 2.Segoe Script 3.Segoe Print 4.Courier New

  3. cordova 5.0 白名单

    最新的cordova 5.0 更新了白名单机制,增强了安全性,但是也给我们在开发中带来了很多问题: 当你引入谷歌.百度地图时,会出现 Failed to load resource -- 解决办法: ...

  4. 黑客界大拿tombkeeper文章:怎么学好技术成为技术大拿(题目我自拟的)

    这两天论坛上又有人开始抱怨世风日下,大家都现实了,都不开放了,不交流了.对这种“月经贴”,我基本上已经习惯了,不过因为吃了粉皮炖鸡,心情比较好,于是就说了两句. 三四年前,当时我对人性的看法还不像现在 ...

  5. SharePoint 2013 开发——SharePoint APP介绍

     博客地址:http://blog.csdn.net/FoxDave 新的APP模型让我们能够创建看起来像是SharePoint的一部分的应用程序,但是它完全运行在独立于SharePoint服务器 ...

  6. 立体透视 perspective transform-style 倾斜旋转

    1.perspective 是设置镜头距离,距离越远视图越小,视图越近,视图越大.就像相机焦距一样.其只对子元素产生效果. 2.transform-style: preserve-3d 设置3d效果, ...

  7. HTML--2图片热点,网页划区,拼接

    图片热点: 规划出图片上的一个区域,可以做出超链接,直接点击图片区域就可以完成跳转的效果. 示例: 网页划区: 在一个网页里,规划出一个区域用来展示另一个网页的内容. 示例: 网页的拼接: 在一个网络 ...

  8. lightoj1085 线段树+dp

    //Accepted 7552 KB 844 ms //dp[i]=sum(dp[j])+1 j<i && a[j]<a[i] //可以用线段树求所用小于a[i]的dp[j ...

  9. poj1160 dp

    //Accepted 564 KB 63 ms //和hdu1227一样 //dp[i][j]=min(dp[i][j],dp[k][j-1]+cost[k+1][i]) //初始化条件,dp[0][ ...

  10. FMDB数据库中的一些操作

    #pragma mark - 数据库的操作 - (BOOL)judgeModel:(TaskResourceModel *)model isInArray:(NSArray *)shopArray { ...