zoukankan      html  css  js  c++  java
  • 二分图最大匹配

     1 #include <bits/stdc++.h>
     2 
     3 using namespace std;
     4 
     5 #define re register
     6 #define rep(i, a, b) for (re int i = a; i <= b; ++i)
     7 #define repd(i, a, b) for (re int i = a; i >= b; --i)
     8 #define maxx(a, b) a = max(a, b);
     9 #define minn(a, b) a = min(a, b);
    10 #define LL long long
    11 #define inf (1 << 30)
    12 
    13 inline int read() {
    14     int w = 0, f = 1; char c = getchar();
    15     while (!isdigit(c)) f = c == '-' ? -1 : f, c = getchar();
    16     while (isdigit(c)) w = (w << 3) + (w << 1) + (c ^ '0'), c = getchar();
    17     return w * f;
    18 }
    19 
    20 const int maxn = 1000 + 5;
    21 
    22 int e[maxn << 1][maxn << 1], v[maxn], lk[maxn];
    23 int n, m, E;
    24 
    25 bool find(int u) {
    26     rep(i, 1, m)
    27         if (!v[i] && e[u][i+n]) {
    28             v[i] = 1;
    29             if (!lk[i] || find(lk[i])) {
    30                 lk[i] = u;
    31                 return true;
    32             }
    33         }
    34     return false;
    35 }
    36 
    37 int main() {
    38     n = read(), m = read(), E = read();
    39 
    40     rep(i, 1, E) {
    41         register int u = read(), v = read();
    42         e[u][v+n] = e[v+n][u] = 1;
    43     }
    44 
    45     int cnt = 0;
    46     rep(i, 1, n) {
    47         memset(v, 0, sizeof(v)); // 如果题目要求比较高,不要用这句话,改为时间戳判断。
    48         if (find(i)) cnt++;
    49     }
    50 
    51     printf("%d", cnt);
    52     return 0;
    53 }
  • 相关阅读:
    止步于磁盘空间不足
    添加随机扰动 爬山算法
    递归 启发式
    删除文件
    linux 下载 图片
    CURD特性
    php 写session
    php 写session
    14.5.4 InnoDB File-Per-Table Tablespaces 每个表一个文件
    14.5.4 InnoDB File-Per-Table Tablespaces 每个表一个文件
  • 原文地址:https://www.cnblogs.com/ac-evil/p/10339847.html
Copyright © 2011-2022 走看看