• 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 }

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

  • 相关阅读:
    Linux图形界面从登录列表中隐藏用户和开机自动登录
    VMware Workstation报错 : 另一个正在运行的VMware进程可能正在使用配置文件
    Vim命令总结
    Linux常用命令总结
    Oracle使用中的常规操作总结
    Oracle分页查询和SQL server分页查询总结
    Oracle学习总结
    Resharper2019 1.2破解教程
    C#实现RSA加密解密
    windows上git clone命令速度过慢问题的解决
  • 原文地址:https://www.cnblogs.com/Shirlies/p/2514611.html
Copyright © 2020-2023  润新知