1 条题解

  • 0
    @ 2025-2-21 19:49:06

    C++ :

    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    #include <vector>
    using namespace std;
    
    const int MaxN = 505;
    
    int T, n, m, v;
    vector<int> e[MaxN];
    bool c[MaxN];
    int s[MaxN];
    int love[2][MaxN];
    int hate[2][MaxN];
    
    bool dfs(int cur) {
        for (int k = 0; k < e[cur].size(); ++ k)
            if (c[e[cur][k]]) {
                c[e[cur][k]] = false;
                if (s[e[cur][k]] < 0 || dfs(s[e[cur][k]])) {
                    s[e[cur][k]] = cur;
                    return true;
                }
            }
        return false;
    }
    
    int main() {
       // freopen("vote.in", "r", stdin);
       // freopen("vote.out", "w", stdout);
        
        n = m = 0;
        scanf("%*d %*d %d", &v);
        for (int k = 1; k <= v; ++ k) {
            char ch;
            scanf(" %c", &ch);
            if (ch == 'C') {
                ++ n;
                scanf("%d %*c%d", &love[0][n], &hate[0][n]);
            }
            else {
                ++ m;
                scanf("%d %*c%d", &love[1][m], &hate[1][m]);
            }
        }
            
        for (int k = 1; k <= n; ++ k)
            e[k].clear();
        for (int i = 1; i <= n; ++ i)
            for (int j = 1; j <= m; ++ j)
                if (love[0][i] == hate[1][j] || hate[0][i] == love[1][j])
                    e[i].push_back(j);
        
        memset(s, -1, sizeof(s));
        int ans = 0;
        for (int k = 1; k <= n; ++ k) {
            memset(c, 1, sizeof(c));
            if (dfs(k)) ++ ans;
        }
        printf("%d\n", v - ans);
        
        return 0;
    }
    
    
    • 1

    信息

    ID
    975
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者