zoukankan      html  css  js  c++  java
  • 洛谷 P3386 【模板】二分图匹配

    题目背景

    二分图

    题目描述

    给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数

    输入输出格式

    输入格式:

    第一行,n,m,e

    第二至e+1行,每行两个正整数u,v,表示u,v有一条连边

    输出格式:

    共一行,二分图最大匹配

    输入输出样例

    输入样例#1:
    1 1 1
    1 1
    输出样例#1:
    1

    说明

    n,m<=1000,1<=u<=n,1<=v<=m

    因为数据有坑,可能会遇到v>m的情况。请把v>m的数据自觉过滤掉。

    算法:二分图匹配

    ++++++++++++++++++++++++++++++++++++++++++++++++++++

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cmath>
     5 #include<algorithm>
     6 #include<queue>
     7 #include<cstdlib>
     8 #include<iomanip>
     9 #include<cassert>
    10 #include<climits>
    11 #include<vector>
    12 #include<list>
    13 #include<map>
    14 #define maxn 1000001
    15 #define F(i,j,k) for(int i=j;i<=k;i++)
    16 #define M(a,b) memset(a,b,sizeof(a))
    17 #define FF(i,j,k) for(int i=j;i>=k;i--)
    18 #define inf 0x7fffffff
    19 #define maxm 2016
    20 #define mod 1000000007
    21 //#define LOCAL
    22 using namespace std;
    23 int read(){
    24     int x=0,f=1;char ch=getchar();
    25     while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    26     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    27     return x*f;
    28 }
    29 int n1,n2,m;
    30 int mp[maxm][maxm];
    31 int vis[maxn],link[maxn];
    32 inline bool find(int u)
    33 {
    34     F(i,1,n2){
    35         if(mp[u][i]&&!vis[i]){
    36             vis[i]=1;
    37             if(link[i]==0||find(link[i])){
    38                 link[i]=u;
    39                 return true;
    40             }
    41         }
    42     }
    43     return false;
    44 }
    45 int ans=0;
    46 int main()
    47 {
    48     std::ios::sync_with_stdio(false);//cout<<setiosflags(ios::fixed)<<setprecision(1)<<y;
    49     #ifdef LOCAL
    50     freopen("data.in","r",stdin);
    51     freopen("data.out","w",stdout);
    52     #endif
    53     cin>>n1>>n2>>m;
    54     F(i,0,m-1){
    55         int x,y;cin>>x>>y;
    56         mp[x][y]=1;
    57     }
    58     F(i,1,n1){
    59         M(vis,false);
    60         if(find(i)) ans++;
    61     }
    62     cout<<ans<<endl;
    63     return 0;
    64 }
    View Code
  • 相关阅读:
    [转载]java日志框架log4j详细配置及与slf4j联合使用教程
    log4j的正确使用姿势
    eclipse 安装properties编辑器,显示中文
    tips:解决bootstrap-switch 在jqgrid中动态加载不显示的问题
    jqgrid 设置为每行单选
    MySQL 批量修改某一列的值为另外一个字段的值
    MySQL 使用左连接替换not in
    分析一个react项目
    React不同版本之间需要注意的地方
    一个出色的表格(React实现__ES5语法)
  • 原文地址:https://www.cnblogs.com/SBSOI/p/6093900.html
Copyright © 2011-2022 走看看