hdu 2768【Cat vs. Dog】

代码如下:
 1 #include <cstdio>
 2 #include <cstring>
 3 #include <vector>
 4 using namespace std;
 5 
 6 struct node
 7 {
 8     char cc[7],dd[7];
 9 }cat[1000],dog[1000];
10 
11 vector<int> match[1000];
12 int vis[1000];
13 int link[1000];
14 int n,m,k;
15 
16 bool can(int x)
17 {
18     int len = match[x].size();
19     for(int i = 0;i < len;i ++)
20     {
21         int t = match[x].at(i);
22         if(!vis[t])
23         {
24             vis[t] = 1;
25             if(link[t] == -1 || can(link[t]))
26             {
27                 link[t] = x;
28                 return true;
29             }
30         }
31     }
32 
33     return false;
34 }
35 
36 int maxmatch()
37 {
38     int num = 0;
39     for(int i = 0;i < k;i ++)
40     {
41         memset(vis,0,sizeof(vis));
42         if(can(i))
43             num ++;
44     }
45 
46     return num;
47 }
48 
49 int main()
50 {
51     int cas;
52     scanf("%d",&cas);
53     while(cas --)
54     {
55         scanf("%d%d%d",&n,&m,&k);
56         memset(link,-1,sizeof(link));
57         for(int i = 0;i < k;i ++)
58         {
59             match[i].clear();
60         }
61         char ss1[5],ss2[5];
62         int catnum = 0,dognum = 0;
63         for(int i = 0;i < k;i ++)
64         {
65             scanf("%s%s",ss1,ss2);
66             if(ss1[0] == 'C')
67             {
68                 strcpy(cat[catnum].cc,ss1);
69                 strcpy(cat[catnum].dd,ss2);
70                 catnum ++;
71             }
72             else
73             {
74                 strcpy(dog[dognum].cc,ss1);
75                 strcpy(dog[dognum].dd,ss2);
76                 dognum ++;
77             }
78         }
79         for(int i = 0;i < catnum;i ++)
80         {
81             for(int j = 0;j < dognum;j ++)
82             {
83                 if(!strcmp(cat[i].cc,dog[j].dd)||!strcmp(cat[i].dd,dog[j].cc))
84                 {
85                     match[i].push_back(j);
86                     //match[j].push_back(i);
87                 }
88             }
89         }
90 
91         printf("%d\n",k - maxmatch());
92     }
93 
94     return 0;
95 }

看了别人的代码才会写的。

原文地址:https://www.cnblogs.com/Shirlies/p/2514611.html