【二分图】 猫和狗

唉唉,做这个题主要是注意一下输入,如果像我这样朴素搞C10这种输入的话就得注意许多东西,我就把代码放在这里吧

WARNING:本代码调试信息极多,,,可能会引起不适,,不过我变量名起的很直观。。

#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cstring>
#include<cctype>
#include<cmath>
#include<algorithm>
#define ll long long
#define re register int
#define mem(x,y) memset(x,y,sizeof(x))
#define char_phi signed
#define iwh printf("我永远爱文虎")
#define MARK printf("~~~")
#define _MARK printf("###")
#define LMARK printf("@@@@@@")
#define SLEEP printf("💤")
#define SLEEPER printf("(~﹃~)~zZ")
#define _ putchar(' ')
#define endl putchar('\n')
#define MAX(x,y) ((x > y) ? (x) : (y))
#define MIN(x,y) ((x < y) ? (x) : (y))
#define ANIMAL 1305
#define AUDI 1505
using namespace std;
int C,D,A,final_ans,star_cnt;
bool vis[AUDI<<1];
int catlike[ANIMAL][AUDI],catunlike[ANIMAL][AUDI],doglike[ANIMAL][AUDI],dogunlike[ANIMAL][AUDI];
// bool cat[ANIMAL],dog[ANIMAL];//true就表示不选出这个🐱/🐕
// struct audience{//这单词是这么拼吗(我逊)
//     bool cat;
//     int lkid,ulkid;
// }a[AUDI]
int mch[AUDI<<2],head[AUDI<<1];
struct star{
    int v,nxt;
}e[AUDI<<2];
inline int read(){
    int x = 0;char c;
    while(!isdigit(c = getchar()));
    do{
        x = (x << 3) + (x << 1) + (c & 15);
    }while(isdigit(c = getchar()));
    return x;
}
void ot(int x){
    if(x > 9) ot(x/10);
    putchar(x % 10 ^ 48);
}
inline void star_add(int u,int v){
    e[++ star_cnt].v = v;
    e[star_cnt].nxt = head[u];
    head[u] = star_cnt;
}
bool dfs(int x){
    for(re i = head[x] ; i ; i = e[i].nxt){
        if(vis[e[i].v] == false){
            vis[e[i].v] = true;
            if(mch[e[i].v] == 0 || dfs(mch[e[i].v]) == true){
                mch[e[i].v] = x;
                return true;
            }
        }
    }
    return false;
}
void xyl(){
    for(re i = 1 ; i <= A ; ++ i){
        // mem(vis,false);
        for(re j = 1 ; j <= 3005 ; ++ j){
            vis[j] = false;
        }
        if(dfs(i) == true) ++ final_ans;
    }
}
// int dfs(int id,int num){
//     if(id == A){
//         return num;
//     }
//     if(a[i].cat == true){//想看猫猫(耶
//         if(cat[a[i].id1] == false){
//             dog[a[i].id2] = true;
//             dfs(id+1,num+1);
//             dog[a[i].id2] = false;
//         }
//     }
// }
void work(){
    //睡大觉()()()()()()()()()()()()()
    //仍然是深搜奥 起码试一试
    C = read(),D = read(),A = read();
    char lk[9],ulk[9];
    //把喜欢某一个动物和讨厌某一个动物的人连起来,然后run最大匹配,最后跑出来的是做都能有多少人的喜好有冲突吧
    //n - final_ans/2
    //upd:还得加双向边...
    //upd:唉唉,输入终于调好了,主要是输入,我想怎么处理输入C10什么的时候dbx提醒了我咋整,让我们说感谢dbx!不知道拿多少分
    for(re i = 1,lker,ulker,len1,len2 ; i <= A ; ++ i){
        scanf("%s%s",lk,ulk);
        len1 = strlen(lk) - 1,len2 = strlen(ulk) - 1;
        lker = 0,ulker = 0;
        // printf("%s %s",lk,ulk);
        // endl;
        // printf("%c %d\n",lk[0],(lk[1] - '0'));
        if(lk[0] == 'C'){
            // catlike[(lk[1] - '0')][++ catlike[(lk[1] - '0')][0]] = i;
            // dogunlike[(ulk[1] - '0')][++ dogunlike[(ulk[1] - '0')][0]] = i;
            for(re j = 1 ; j <= len1 ; ++ j){
                lker = (lker * 10 + (lk[j] - '0'));
                // SLEEP,SLEEP,endl;
                // SLEEP,ot(lker),_;
            }
            // endl;
            for(re j = 1 ; j <= len2 ; ++ j){
                ulker = (ulker * 10 + (ulk[j] - '0'));
            }
            // SLEEP,printf("猫猫"),_,ot(len1),_,ot(len2),_,_,ot(lker),_,ot(ulker),endl;
            catlike[lker][++ catlike[lker][0]] = i;
            dogunlike[ulker][++ dogunlike[ulker][0]] = i;
        }
        else if(lk[0] == 'D'){
            // doglike[(lk[1] - '0')][++ doglike[(lk[1] - '0')][0]] = i;
            // catunlike[(ulk[1] - '0')][++ catunlike[(ulk[1] - '0')][0]] = i;
            for(re j = 1 ; j <= len1 ; ++ j){
                lker = (lker * 10 + (lk[j] - '0'));
            }
            for(re j = 1 ; j <= len2 ; ++ j){
                ulker = (ulker * 10 + (ulk[j] - '0'));
            }
            // SLEEP,printf("修勾"),_,ot(lker),_,ot(ulker),endl;
            doglike[lker][++ doglike[lker][0]] = i;
            catunlike[ulker][++ catunlike[ulker][0]] = i;
        }
    }
    /*for(re i = 1 ; i <= 5 ; ++ i) endl;
    for(re i = 1 ; i <= C ; ++ i){
        MARK,ot(i),_,_,ot(catlike[i][0]),_,ot(catunlike[i][0]),endl;
        SLEEP;
        printf("喜欢的观众  ");
        for(re j = 1 ; j <= catlike[i][0] ; ++ j){
            ot(catlike[i][j]),_;
        }
        endl;
        SLEEP;
        printf("不喜欢的观众  ");
        for(re j = 1 ; j <= catunlike[i][0] ; ++ j){
            ot(catunlike[i][j]),_;
        }
        endl;
        LMARK,endl;
    }
    SLEEPER,_,_,SLEEPER,endl;
    for(re i = 1 ; i <= D ; ++ i){
        MARK,ot(i),_,_,ot(doglike[i][0]),_,ot(dogunlike[i][0]),endl;
        SLEEP;
        printf("喜欢的观众  ");
        for(re j = 1 ; j <= doglike[i][0] ; ++ j){
            ot(doglike[i][j]),_;
        }
        endl;
        SLEEP;
        printf("不喜欢的观众  ");
        for(re j = 1 ; j <= dogunlike[i][0] ; ++ j){
            ot(dogunlike[i][j]),_;
        }
        endl;
        LMARK,endl;
    }*/
    for(re i = 1 ; i <= C ; ++ i){
        if(catunlike[i][0] != 0 && catlike[i][0] != 0){
            for(re j = 1 ; j <= catlike[i][0] ; ++ j){
                for(re k = 1 ; k <= catunlike[i][0] ; ++ k){
                    star_add(catlike[i][j],catunlike[i][k]);
                    star_add(catunlike[i][k],catlike[i][j]);
                }
            }
        }
    }
    for(re i = 1 ; i <= D ; ++ i){
        if(dogunlike[i][0] != 0 && doglike[i][0] != 0){
            for(re j = 1 ; j <= doglike[i][0] ; ++ j){
                for(re k = 1 ; k <= dogunlike[i][0] ; ++ k){
                    star_add(doglike[i][j],dogunlike[i][k]);
                    star_add(dogunlike[i][k],doglike[i][j]);
                }
            }
        }
    }
    xyl();
    // iwh,ot(A);
    ot((A - (final_ans >> 1)) );
}
char_phi main(){
    // freopen("a.in","r",stdin);
    // freopen("a.out","w",stdout);
    work();
    return 0;
}

 

posted @   char_phi  阅读(40)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示