hdu1281(二分图匹配)

来源:互联网 发布:mac怎么打中文 编辑:程序博客网 时间:2024/05/22 15:03

棋盘游戏

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 4533    Accepted Submission(s): 2691


Problem Description
小希和Gardon在玩一个游戏:对一个N*M的棋盘,在格子里放尽量多的一些国际象棋里面的“车”,并且使得他们不能互相攻击,这当然很简单,但是Gardon限制了只有某些格子才可以放,小希还是很轻松的解决了这个问题(见下图)注意不能放车的地方不影响车的互相攻击。 
所以现在Gardon想让小希来解决一个更难的问题,在保证尽量多的“车”的前提下,棋盘里有些格子是可以避开的,也就是说,不在这些格子上放车,也可以保证尽量多的“车”被放下。但是某些格子若不放子,就无法保证放尽量多的“车”,这样的格子被称做重要点。Gardon想让小希算出有多少个这样的重要点,你能解决这个问题么?
 

Input
输入包含多组数据, 
第一行有三个数N、M、K(1<N,M<=100 1<K<=N*M),表示了棋盘的高、宽,以及可以放“车”的格子数目。接下来的K行描述了所有格子的信息:每行两个数X和Y,表示了这个格子在棋盘中的位置。
 

Output
对输入的每组数据,按照如下格式输出: 
Board T have C important blanks for L chessmen.
 

Sample Input
3 3 41 21 32 12 23 3 41 21 32 13 2
 

Sample Output
Board 1 have 0 important blanks for 2 chessmen.Board 2 have 3 important blanks for 3 chessmen.
 

Author
Gardon
 
   前面和模板一模一样。。。后面只要枚举放不放这个格子的所有情况,就可以得出答案了。
   
#include <bits/stdc++.h> using namespace std;  const int N = 105;  int mp[N][N], use[N], vis[N];  int m, n, k, x[N * N], y[N * N];  int find(int x)  {      for(int j = 1; j <= m; j++)      {          if(mp[x][j] && !vis[j])          {              vis[j] = 1;              if(use[j] == 0 || find(use[j]) == 1)              {                  use[j] = x;                  return 1;              }          }      }      return 0;  }    int mat()  {      int sum = 0;      memset(use, 0, sizeof(use));      for(int i = 1; i <= n; i++)      {          memset(vis, 0, sizeof(vis));          if(find(i)) sum++;      }      return sum;  }    int main()  {      int Case = 1;      while(scanf("%d%d%d", &n, &m, &k) != EOF)      {          memset(mp, 0, sizeof(mp));            for(int i = 1; i <= k; i++)          {              scanf("%d%d", &x[i], &y[i]);              mp[x[i]][y[i]] = 1;          }          int ans = mat();          int sum = 0;          for(int i = 1; i <= k; i++)          {              mp[x[i]][y[i]] = 0;              int res = mat();              mp[x[i]][y[i]] = 1;              if(res < ans) sum++;          }          printf("Board %d have %d important blanks for %d chessmen.\n", Case++, sum, ans);      }      return 0;  }  

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 二胎七个月肚子太大怎么办 上火牙疼牙龈肿怎么办 孕30周乳房胀痛怎么办 怀孕长妊娠纹了怎么办 坐久了肚子胀疼怎么办 怀孕后胖的太快怎么办 怀孕牙齿全坏了怎么办 怀孕脸胖了好多怎么办 孕晚期不爱吃肉怎么办 怀孕期间胖了怎么办啊 孕期长得太胖怎么办 狗吃马肉脸肿了怎么办 狗过敏了脸肿了怎么办 孕初期外阴很痒怎么办 怀孕了吃了田鸡怎么办 孕妇睡眠质量差怎么办吃什么 39周2天了还不生怎么办 孕中期体重猛长怎么办 4个半月胎位不正怎么办 41周不产生宫缩怎么办 生完孩子胎盘没有脱落怎么办 39周还是臀位怎么办 怀孕7个月胎位不正怎么办 怀孕六个多月胎位不正怎么办 怀孕七个月了胎位不正怎么办 怀孕七个月胎位不正怎么办 怀孕肚子上有妊娠纹怎么办 怀孕九个月肚子长痱子怎么办 怀孕前体重偏胖怎么办 怀孕打胰岛素血糖控制不好怎么办 孕后期憋的难受怎么办 怀孕6个月不想生怎么办 孕六个月不想要怎么办 怀孕9个月喝酒了怎么办 怀孕8个月喝醉了怎么办 怀孕6个月胃酸烧心怎么办 怀孕7个月胃酸怎么办 怀孕5个月胃酸怎么办 怀孕2个月胃酸怎么办 怀孕六个月胃酸烧心怎么办 孕六个月反胃酸怎么办