zoukankan      html  css  js  c++  java
  • hdu 2768(最大独立集)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2768

    思路:把喜欢cat的和喜欢dog的看成两个集合,如果这两个集合有冲突,即cat.love==dog.hate或者cat.hate==dog.love,这连边,代表有矛盾,那么最后的结果不就是求一下最大独立集吗。

    最大独立集=顶点数-最大匹配。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<string>
     5 #include<algorithm>
     6 using namespace std;
     7 #define MAXN 2222
     8 struct Node {
     9     string love;
    10     string hate;
    11 } cat[MAXN],dog[MAXN];
    12 int cat_cnt,dog_cnt;
    13 bool map[MAXN][MAXN];
    14 bool mark[MAXN];
    15 int ly[MAXN];
    16 char s1[11],s2[11];
    17 
    18 int dfs(int u) {
    19     for(int v=0; v<dog_cnt; v++) {
    20         if(map[u][v]&&!mark[v]) {
    21             mark[v]=true;
    22             if(ly[v]==-1||dfs(ly[v])) {
    23                 ly[v]=u;
    24                 return 1;
    25             }
    26         }
    27     }
    28     return 0;
    29 }
    30 
    31 int MaxMatch() {
    32     int res=0;
    33     memset(ly,-1,sizeof(ly));
    34     for(int i=0; i<cat_cnt; i++) {
    35         memset(mark,false,sizeof(mark));
    36         res+=dfs(i);
    37     }
    38     return res;
    39 }
    40 
    41 int main() {
    42 //   freopen("1.txt","r",stdin);
    43     int _case,c,d,v;
    44     scanf("%d",&_case);
    45     while(_case--) {
    46         scanf("%d%d%d",&c,&d,&v);
    47         cat_cnt=dog_cnt=0;
    48         for(int i=0; i<v; i++) {
    49             scanf("%s%s",s1,s2);
    50             if(s1[0]=='C') {
    51                 cat[cat_cnt].love=s1;
    52                 cat[cat_cnt++].hate=s2;
    53             } else {
    54                 dog[dog_cnt].love=s1;
    55                 dog[dog_cnt++].hate=s2;
    56             }
    57         }
    58         memset(map,false,sizeof(map));
    59         for(int i=0; i<cat_cnt; i++) {
    60             for(int j=0; j<dog_cnt; j++) {
    61                 if(cat[i].love==dog[j].hate||cat[i].hate==dog[j].love) {
    62                     map[i][j]=true;
    63                 }
    64             }
    65         }
    66         int ans=MaxMatch();
    67         printf("%d\n",v-ans);
    68     }
    69     return 0;
    70 }
    View Code
  • 相关阅读:
    8 pandas模块,多层索引
    7 numpy 傅里叶,提取图片轮廓
    6 DataFrame处理丢失数据--数据清洗
    5 pandas模块,DataFrame类
    4 pandas模块,Series类
    3 numpy模块
    2 线性代数基础
    1 Ipython、Jupyter 入门
    jdk安装与环境变量配置(一劳永逸)
    对jsp可见域的变量感悟
  • 原文地址:https://www.cnblogs.com/wally/p/3119253.html
Copyright © 2011-2022 走看看