zoukankan      html  css  js  c++  java
  • hdu 3289 最大独立集

    题意:一个动物园里有N只猫和K只狗,一些小朋友来参观,他们如果喜欢狗就不喜欢猫,喜欢猫就不喜欢狗,园长想要移走一些动物,如果,移走的是某个小朋友不喜欢的,而喜欢的没被移走,该小朋友就会高兴,求移动的数目使得最多的小朋友开心

    Sample Input
    1 1 2   //1个猫1个狗2个小朋友
    C1 D1   //一号小朋友喜欢c1,讨厌d1
    D1 C1
    1 2 4
    C1 D1
    C1 D1
    C1 D2
    D2 C1
     
     
    转换为最大独立集做
     1 #include<cstdio>
     2 #include<iostream>
     3 #include<algorithm>
     4 #include<cstring>
     5 #include<cmath>
     6 #include<queue>
     7 using namespace std;
     8 #define for0n for(i=0;i<n;i++)
     9 #define for1n for(i=1;i<=n;i++)
    10 #define cl(a) memset(a,0,sizeof(a))
    11 #define w12 while(scanf("%d%d",&n,&m)!=EOF)
    12 int n,m,t;
    13 const int MAXN = 1510;
    14 int uN,vN;//u,v的数目,使用前面必须赋值
    15 int g[MAXN][MAXN];//邻接矩阵
    16 int linker[MAXN];
    17 bool used[MAXN];
    18 bool dfs(int u)
    19 {
    20     for(int v = 0; v < vN;v++)
    21     if(g[u][v] && !used[v])
    22     {
    23         used[v] = true;
    24         if(linker[v] == -1 || dfs(linker[v]))
    25         {
    26             linker[v] = u;
    27             return true;
    28         }
    29     }
    30     return false;
    31 }
    32 int hungary()
    33 {
    34     int res = 0;
    35     memset(linker,-1,sizeof(linker));
    36     for(int u = 0;u < uN;u++)
    37     {
    38         memset(used,false,sizeof(used));
    39         if(dfs(u))res++;
    40     }
    41     return res;
    42 }
    43 int main()
    44 {
    45     int i,j,k;
    46     #ifndef ONLINE_JUDGE
    47     freopen("1.in","r",stdin);
    48     #endif
    49     char s1[MAXN][5],s2[MAXN][5];
    50     int p;
    51     while(scanf("%d%d%d",&n,&m,&p)!=EOF)
    52     {
    53         cl(g);
    54         for(i=0;i<p;i++)
    55         {
    56             scanf("%s%s",s1[i],s2[i]);
    57         }
    58         uN=vN=p;
    59         for(i=0;i<p;i++)
    60         {
    61             for(j=i+1;j<p;j++)
    62             {
    63                 if(strcmp(s1[i],s2[j])==0||strcmp(s1[j],s2[i])==0)
    64                 {
    65                     g[i][j]=1;
    66                     g[j][i]=1;
    67                 }
    68             }
    69         }
    70         printf("%d
    ",p-hungary()/2);
    71     }
    72 }
  • 相关阅读:
    SQL Server中使用convert进行日期转换
    杂记
    sqlserver表分区与调优与行列转换
    HttpModule的认识与深入理解及MVC运行机制
    再谈委托
    ASP.NET forms凭据设置和跳转的几种方法
    IOS学习网址
    Activator.CreateInstance 方法 (Type) 的用法
    update多表更新的2种方式
    SQL自定义函数split分隔字符串
  • 原文地址:https://www.cnblogs.com/cnblogs321114287/p/4388763.html
Copyright © 2011-2022 走看看