hdu 4185 二分图匹配

题意用1*2的木板覆盖矩阵中的‘#’,(木板要覆盖的只能是‘#’),问最多能用几个木板覆盖

将#抽象为二分图的点,一个木板就是一个匹配,注意最后结果要除以2

Sample Input

1
6
......
.##...
.##...
....#.
....##
......

Sample Output

Case 1: 3

 1 #include<stdio.h>
 2 #include<string.h>
 3 const int MAXN=1000;
 4 char map[610][610];
 5 int tt[610][610];
 6 int uN,vN;  //u,v数目
 7 int g[MAXN][MAXN];
 8 int linker[MAXN];
 9 bool used[MAXN];
10 bool dfs(int u)
11 {
12     int v;
13     for(v=0;v<vN;v++)
14         if(g[u][v]&&!used[v])
15         {
16             used[v]=true;
17             if(linker[v]==-1||dfs(linker[v]))
18             {
19                 linker[v]=u;
20                 return true;
21             }
22         }
23     return false;
24 }
25 int hungary()
26 {
27     int res=0;
28     int u;
29     memset(linker,-1,sizeof(linker));
30     for(u=0;u<uN;u++)
31     {
32         memset(used,0,sizeof(used));
33         if(dfs(u))  res++;
34     }
35     return res;
36 }
37
38 int main()
39 {
40     int T;
41     int n;
42     scanf("%d",&T);
43     int iCase=0;
44     int tmp;
45     while(T--)
46     {
47         iCase++;
48         scanf("%d",&n);
49
50         tmp=0;
51         for(int i=0;i<n;i++)
52         {
53           scanf("%s",&map[i]);
54           for(int j=0;j<n;j++)
55            if(map[i][j]==‘#‘) tt[i][j]=tmp++;
56         }
57         memset(g,0,sizeof(g));
58         uN=vN=tmp;
59         for(int i=0;i<n;i++)
60           for(int j=0;j<n;j++)
61           {
62               if(map[i][j]!=‘#‘) continue;
63               if(i>0&&map[i-1][j]==‘#‘) g[tt[i][j]][tt[i-1][j]]=1;
64               if(i<n-1&&map[i+1][j]==‘#‘) g[tt[i][j]][tt[i+1][j]]=1;
65               if(j>0&&map[i][j-1]==‘#‘) g[tt[i][j]][tt[i][j-1]]=1;
66               if(j<n-1&&map[i][j+1]==‘#‘) g[tt[i][j]][tt[i][j+1]]=1;
67           }
68
69         int res=hungary();
70         printf("Case %d: %d\n",iCase,res/2);
71     }
72     return 0;
73 }
时间: 2024-10-13 17:57:52

hdu 4185 二分图匹配的相关文章

hdu 2063 二分图匹配

题意:一些女的和一些男的有好感,有好感的能一起坐过山车,问最多能组成多少对 hdu 11 页上少有的算法题,二分图匹配问题,匈牙利算法,对于每一个汉子,看和他有好感的妹子有没有配对了,没有配对过就可以成功配对,若已经配对过了,就看那个妹子所配对的汉子能不能再找个没有配对的妹子,如果可以就拆散当前配对重组配对,否则就不能拆:如果找完所有有好感的妹子仍然没能配对成功,那这个汉子就注定孤独一生了``` 1 #include<stdio.h> 2 #include<string.h> 3

hdu 1281 二分图匹配

题目:在保证尽量多的“车”的前提下,棋盘里有些格子是可以避开的,也就是说,不在这些格子上放车,也可以保证尽量多的“车”被放下.但是某些格子若不放子,就 无法保证放尽量多的“车”,这样的格子被称做重要点.Gardon想让小希算出有多少个这样的重要点,你能解决这个问题么? 二分图匹配居然还能这么用!!!脑洞大开啊!!! 思路:把棋盘的行x看成二分图左边的点,列y看成二分图右边的点,那么就把可以放车的位置看成是一条边,而二分图的最大匹配中x互不相同,y 互不相同,所以每个匹配都是不同行不同列,所以最大

过山车 HDU 2063 (二分图匹配裸题)

Problem Description RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生做partner和她同坐.但是,每个女孩都有各自的想法,举个例子把,Rabbit只愿意和XHD或PQK做partner,Grass只愿意和linle或LL做partner,PrincessSnow愿意和水域浪子或伪酷儿做partner.考虑到经费问题,boss刘决定只让找到partner的人去坐过山

Land of Farms HDU - 5556 二分图匹配

Farmer John and his brothers have found a new land. They are so excited and decide to build new farms on the land. The land is a rectangle and consists of N×MN×Mgrids. A farm consists of one or more connected grids. Two grids are adjacent if they sha

Oil Skimming HDU - 4185(匹配板题)

Oil Skimming Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3426    Accepted Submission(s): 1432 Problem Description Thanks to a certain "green" resources company, there is a new profitabl

Girls and Boys HDU - 1068 二分图匹配(匈牙利)+最大独立集证明

最大独立集证明参考:https://blog.csdn.net/qq_34564984/article/details/52778763 最大独立集证明: 上图,我们用两个红色的点覆盖了所有边.我们证明的前提条件是已经达到最小覆盖. 即条件1.已经覆盖所有边,条件2.所用的点数最小 首先我们来证明蓝色点组成的是一个独立集:如果有两个蓝色点间有边相连,那么这条 边则没有被覆盖,则与条件1矛盾.因此是独立集. 再来证明这个独立集最大: 如果我们要再增加这个独立集中的点,则需要把某个红点变 成蓝点.而

hdu 4185 Oil Skimming(二分匹配)

Oil Skimming Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 883    Accepted Submission(s): 374 Problem Description Thanks to a certain "green" resources company, there is a new profitable

HDU 3081:Marriage Match II(二分图匹配+并查集)

http://acm.hdu.edu.cn/showproblem.php?pid=3081 题意:有n个男生n个女生,他们只有没有争吵或者女生a与男生A没有争吵,且女生b与女生a是朋友,因此女生b也可以和男生A过家家(具有传递性).给出m个关系,代表女生a和男生b没有争吵过.给出k个关系,代表女生a与女生b是好朋友.每一轮过家家之后,女生只能选择可以选择并且没选过的男生过家家,问游戏能进行几轮. 思路:因为n<=100,因此支持O(n^3)的算法,挺容易想到是一个二分图匹配的.(出现在我的网络

HDU 5943 Kingdom of Obsession 【二分图匹配 匈牙利算法】 (2016年中国大学生程序设计竞赛(杭州))

Kingdom of Obsession Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 49    Accepted Submission(s): 14 Problem Description There is a kindom of obsession, so people in this kingdom do things very